现有控件:

例如ASP.NET MVC框架包括以下设置标准的HTML控件(部分控件):

  • Html.ActionLink()
  • Html.BeginForm()
  • Html.CheckBox()
  • Html.DropDownList()
  • Html.EndForm()
  • Html.Hidden()
  • Html.ListBox()
  • Html.Password()
  • Html.RadioButton()
  • Html.TextArea()
  • Html.TextBox()

Html控件的返回值

每一个Html控件都返回了MvcHtmlString ,他继承了HtmlString,微软把他定义为不能再次编辑的Html字符串。如MvcHtmlString : HtmlString。

知道了返回值我们就知道从哪里入手写自己的控件了。

自定义Html控件

先看个例子

我们用html写这样一段代码

<label for='male'>男</label>
<input type="radio" name="sex" id="male" />
<br />
<label for='female'>女</label>
<input type="radio" name="sex" id="female" />

  

其运行效果为:


在MVC项目中添加一个Controls文件夹

添加名为MyControls的类

代码:

 
    public class MyControls
{
/// <summary>
/// Lable文本
/// </summary>
/// <param name="fortarget">for属性</param>
/// <param name="text">显示文本</param>
/// <returns></returns>
public static MvcHtmlString Label(string fortarget, string text)
{
string str = String.Format("<label for='{0}'>{1}</label>", fortarget, text);
return new MvcHtmlString(str); } public static MvcHtmlString Label(string text)
{
return Label("",text);
} /// <summary>
/// RadioButton
/// </summary>
/// <param name="nametarget">name属性</param>
/// <param name="idtarget">id属性</param>
/// <returns></returns>
public static MvcHtmlString RadioButton(string nametarget, string idtarget)
{
string str = String.Format("<input type='radio' name='{0}' id='{1}' />", nametarget, idtarget);
return new MvcHtmlString(str);
}
}
 

  

上面两个控件我们都返回了MvcHtmlString ,用于将String的内容显示为Html内容。

Html代码:

@using MvcApplication.Controls;
@MyControls.Label("male", "男")
@MyControls.RadioButton("sex", "male")
<br />
@MyControls.Label("female", "女")
@MyControls.RadioButton("sex", "female")

运行效果

可以看到与上面标准的Html代码效果是一样的。

Html控件自定义扩展

上面的例子我们可以看出自定义的控件完全可以让我们简单的实现自己想要的功能。

但是这些要使用自己的命名空间,而且还要找到自己定义的控件类,有点麻烦,能不能整合到系统自己的Html控件库呢?

像这种?

回答当然是肯定的,我们可以将这些自己的控件做为系统控件的扩展控件,在调用的时候不是就简单而且亲切嘛?

 

Html控件扩展类

先看下面的代码

        //
// 摘要:
// 获取或设置 System.Web.Mvc.HtmlHelper 对象,该对象用于呈现 HTML 元素。
//
// 返回结果:
// 用于呈现 HTML 元素的 System.Web.Mvc.HtmlHelper 对象。
public HtmlHelper<TModel> Html { get; set; }

这是系统对页面上@Html属性的定义。

我们可以看到该Html是返回了一个HtmlHelper

看到这里我们的入口点就找到了,就是以HtmlHelper作为扩展类型。

继续在建好的Controls文件夹中建立名为LabelExtensions的类和RadioButtonExtensions的类

代码

    public static class LabelExtensions
{
public static MvcHtmlString LKLabel(this HtmlHelper helper, string fortarget, string text)
{
string str = String.Format("<label for='{0}'>{1}</label>", fortarget, text);
return new MvcHtmlString(str);
}
} public static class RadioButtonExtensions
{
public static MvcHtmlString LKRadioButton(this HtmlHelper helper, string nametarget, string idtarget)
{
string str = String.Format("<input type='radio' name='{0}' id='{1}' />", nametarget, idtarget);
return new MvcHtmlString(str); }
}

  

调用控件

此时我们再写Html控件看看

页面代码

@using MvcApplication.Controls;
@Html.LKLabel("male", "男")
@Html.LKRadioButton("sex", "male")
<br />
@Html.LKLabel("female", "女")
@Html.LKRadioButton("sex", "female")

  

运行效果

这些例子,挺好的,学习用,还行

MVC 3.0学习笔记(自定义控件)的更多相关文章

  1. MVC缓存OutPutCache学习笔记 (二) 缓存及时化VaryByCustom

    <MVC缓存OutPutCache学习笔记 (一) 参数配置> 本篇来介绍如何使用 VaryByCustom参数来实现缓存的及时化.. 根据数据改变来及时使客户端缓存过期并更新.. 首先更 ...

  2. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  3. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  4. DirectX 总结和DirectX 9.0 学习笔记

    转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...

  5. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  6. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. hdcms v5.7.0学习笔记

    hdcms v5.7.0学习笔记 https://note.youdao.com/ynoteshare1/index.html?id=c404d63ac910eb15a440452f73d6a6db& ...

  9. dhtmlxgrid v3.0学习笔记

    dhtmlxgrid v3.0学习笔记 分类: dhtmlx JavaScript2012-01-31 15:41 1744人阅读 评论(0) 收藏 举报 stylesheetdatecalendar ...

随机推荐

  1. Syntax error missing ; before *

      [问题] I have a header file like so: #pragma once #include "gamestate.h" #include "Ex ...

  2. docker service ps打印出来的错误信息被截断了怎么办?

      [解决方法] 用Format属性: 这个其实解决不了截断的问题,不过可以显示更少的列,看起来更清楚. Formatting The formatting options (--format) pr ...

  3. C118+OSMCOMBB嗅探短信

    ubuntu系统:12.04.4, 下载地址:http://cdimage.ubuntu.com/releases/12.04.4/release/ 编译环境下载 : http://pan.baidu ...

  4. Spring Boot中Starter是什么

    比如我们要在Spring Boot中引入Web MVC的支持时,我们通常会引入这个模块spring-boot-starter-web,而这个模块如果解压包出来会发现里面什么都没有,只定义了一些POM依 ...

  5. WampServer在win10系统下安装的坑

    WampServer之前一直是好好的,最近换了Win10的系统,安装的不太顺利. 1.问题一 出现的第一个问题,就是安装时会报错.怎么解决的,具体的我已经忘记了,好像是要下载vc运行时包. 2.问题二 ...

  6. kendoUpload

    <style> .upfile { display: inline-block; width: %; } .upfile li { display: inline-block; width ...

  7. pynput使用简单说明

    控制鼠标 from pynput.mouse import Button, Controller import time mouse = Controller() print(mouse.positi ...

  8. Python2.7.14新手学习

    python2.7.14 让用户选择一个功能,然后对其进行操作的例子.中间有问题的是年龄没有做是否是数字判断 注意:和版本python3不同的地方 1.编码 2.输入地方是raw_input 3.业务 ...

  9. Win10 PLSQL 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致

    plsql 登录后提示: Database character set (AL32UTF8) and Client character set (ZHS16GBK) are different.Cha ...

  10. Java中String、StringBuffer和StringBuilder的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6581009.html  在编程中,对于字符串拼接,我们可以用String类重载的+或concat(str).S ...