MVC 3.0学习笔记(自定义控件)

现有控件:

例如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")

  

运行效果

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

时间: 2024-08-30 02:15:49

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

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术

ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎. Razor在减少代码冗余.增强代码可读性和Visual Studio智能感知方面,都有着突出的优势.Razor一经推出就深受广大ASP.Net开发者的喜爱. 1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分

微软企业库5.0学习笔记(10)ASP.NET模块依赖注入

您可以使用HTTP模块,一个到ASP.NET HttpApplicationState类的扩展,在Global.asax编写代码强制ASP.NET在每一个页面请求时自动注入依赖的对象,就像在ASP.NET Web窗体应用程序中讨论的一样. 下列方法显示了一个合适的方法能够获取PreRequestHandlerExecute事件将它自己注入到ASP.NET的执行流水线,在每个页面请求中通过容器的BuildUp方法运行Http模块,并获取OnPageInitComplete事件.当OnPageIni

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

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字

Swift 2.0学习笔记(Day5)--我所知道的标识符和关键字   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整理一下Swift中的标识符和关键字. 什么是标识符呢? 标识符就是给变量.常量.方法.函数.枚举.结构体.类.协议等由开发人员指定的名字. 其实,构成标识符的字母是有一定规范的,Swift中命名规则是: 区分大小写,Myname与myname是两个不同的标识符: 标识符首字符可以以下划线(_)或者字

Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介

转自:http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介 Quartz.NET 2.0 学习笔记(2) :和1.0的几点不同 Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度 Quartz.NET 2.0 学习笔记(4) :c

Swift 2.0学习笔记(Day 29)——访问级别

Swift 2.0学习笔记(Day 29)——访问级别 原创文章,欢迎转载.转载请注明:关东升的博客 访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和private.这些访问修饰符可以修饰类.结构体.枚举等面向对象的类型,还可以修饰变量.常量.下标.元组.函数.属性等内容. l public.可以访问自己模块中的任何public实体.如果使用import语句引入其他模块,我们可以访问其他模块中的public实体. l internal.只能访问自

Hadoop1.0.0学习笔记

Hadoop1.0.0学习笔记 一.  安装JDK,配置环境JAVA环境变量 exportJAVA_HOME=/home/ligang/jdk1.6.0_26 exportJRE_HOME=/home/ligang/jdk1.6.0_26/jre exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 二.  安装Hadoop-1.0.0 1.     下载hadoop文件,地址为:http://hadoop.apache.org/co

Swift 2.0学习笔记(Day 37)——默认构造函数

Swift 2.0学习笔记(Day 37)--默认构造函数原创文章,欢迎转载.转载请注明:关东升的博客 结构体和类的实例在构造过程中会调用一种特殊的init方法,称为构造函数.构造函数没有返回值,可以重载.在多个构造函数重载的情况下,运行环境可以根据它的外部参数名或参数列表调用合适的构造函数.默认构造函数结构体和类在构造过程中会调用一个构造函数,即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数.下面看示例代码: class Rectangle { var width: Double