MVC 5 第三章 HTML Helper
提及到HTML helper大家肯定不应该陌生, 因为在书写MVC View的时候肯定需要使用到它。一个HTML Help就是一个返回HTML字符串的方法,这个字符串表示你所期望的类型的内容。例如,你可以使用HTML Helper去呈现标准的HTML标记像HTML <input>, <button>和<image>等标记。如果MVC提供的内建的HTML helper满足不了你的View的输出需求,并且你想输入一种更复杂的类型的内容例如HTML table等等,那么你可以利用MVC提供的定制功能去开发扩展的HTML helper为你所用, 下面我们简单介绍下MVC提供的几种HTML helper.
不同类型的HTML Helpers, 归纳起来MVC提供了如下三种类型的HTML Helper:
1. Inline HTML Helpers(又名内联HTML Helper)
这种类型的HTML Helper只能在定义它的视图View中使用,只能做基本的扩展,缺乏必要的重用性,定义的语法以 Razor @helper 标签开头,后面跟着添加方法的签名,例子如下:
@helper ListingItems(string[] items)
{
<ol>
@foreach (string item in items)
{
<li>@item</li>
}
</ol>
}
<h3>Programming Languages:</h3>
@ListingItems(new string[] { "C", "C++", "C#" })
<h3>Book List:</h3>
@ListingItems(new string[] { "How to C", "how to C++", "how to C#" })
2. Built-In Html Helpers(内建的HTML Helper)
此种类型的HTML Helper为MVC默认提供Ship的, 具体细分有可细分为三种类型
1) 标准HTML Helper
HTML Element 示例
输出Output:
<input id="Textbox1" name="Textbox1" type="text" value="val" />输出Output:
<textarea cols="15" id="Textarea1" name="Textarea1" rows="5">val</textarea>输出Output:
<input id="Password1" name="Password1" type="password" value="val" />输出Output:
<input id="Hidden1" name="Hidden1" type="hidden" value="val" />输出Output:
<input id="Checkbox1" name="Checkbox1" type="checkbox" value="true" /> <input name="myCheckbox" type="hidden" value="false" />输出Output:
<input checked="checked" id="Radiobutton1" name="Radiobutton1" type="radio" value="val" />输出Output:
<select id="DropDownList1" name="DropDownList1"> <option>M</option> <option>F</option> </select>输出Output:
<select id="ListBox1" multiple="multiple" name="ListBox1"> <option>Cricket</option> <option>Chess</option> </select>2) 强类型HTML Helper
这些强类型的Helpers被用于呈现 最常用类型的HTML元素诸如文本框,复选框在强类型的视图中。也就是说视图中HTML元素的创建是基于实体模型属性的。另外,强类型的HTML helpers配合Lambda表达式使用。实体模型对象属性作为一个值被传递给Lambda表达式,并且你可以从实体模型对象中选择字段或属性用来设置HTML helper的id, 名称和值的特性。如下列表列出了最常用的强类型HTML helpers.
输出Output:
<input id="Name" name="Name" type="text" value="Name-val" />输出Output:
<textarea cols="15" id="Address" name=" Address " rows="5">Addressvalue</textarea>输出Output:
<input id="Password" name="Password" type="password"/>输出Output:
<input id=" UserId" name=" UserId" type="hidden" value="UserId-val" />输出Output:
<input id="Checkbox1" name="Checkbox1" type="checkbox" value="true" /> <input name="myCheckbox" type="hidden" value="false" />输出Output:
<input checked="checked" id="Radiobutton1" name="Radiobutton1" type="radio" value="val" />输出Output:
<select id="Gender" name="Gender"> <option>Male</option> <option>Female</option> </select>输出Output:
<select id="Hobbies" multiple="multiple" name="Hobbies"> <option>Cricket</option> <option>Chess</option> </select>3)模板类HTML Helpers
这些helpers解决了什么样的HTML元素被用来呈现依据实体模型类的属性。对用户来说这是一个非常灵活的方法,尽管它需要一些初始化的设置。要通过Templated HTML Helper建立正确的HTML元素,可以使用DataAnnotation类的DataType特性。例如,当你使用Password 数据类型的时候,一个templated helper讲自动呈现Password类型的HTML输入元素。具体示例如下所示。
Html.Display("Name")
Html.DisplayFor(m => m. Name)
Html.Editor("Name")
Html.EditorFor(m => m. Name)
3.自定义Html Helpers(Custom Html Helpers)
如果上述HTML helpers无法满足你的需求,你也可以创建你自己的自定义helper方法,这需要通过创建扩展方法在HTMLHelper类上或者通过在utility类中添加静态方法来实现,具体示例如下所示。
public static class CustomHelpers
{
//Submit Button Helper
public static MvcHtmlString SubmitButton(this HtmlHelper helper, string
buttonText)
{
string str = "<input type=\"submit\" value=\"" + buttonText + "\" />";
return new MvcHtmlString(str);
}
//Readonly Strongly-Typed TextBox Helper
public static MvcHtmlString TextBoxFor<TModel, TValue>(this
HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>>
expression, bool isReadonly)
{
MvcHtmlString html = default(MvcHtmlString); if (isReadonly)
{
html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper,
expression, new { @class = "readOnly",
@readonly = "read-only" });
}
else
{
html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper,
expression);
}
return html;
}
} P.S. 你永远不知道你能做多少, 只有你去做了才知道.
MVC 5 第三章 HTML Helper的更多相关文章
- Pro ASP.NET Core MVC 6th 第三章
第三章 MVC 模式,项目和约定 在深入了解ASP.NET Core MVC的细节之前,我想确保您熟悉MVC设计模式背后的思路以及将其转换为ASP.NET Core MVC项目的方式. 您可能已经了解 ...
- [HeadFirst-JSPServlet学习笔记][第三章:实战MVC]
第三章 实战MVC J2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范.规定了servlets2.4,JSP2.0,EJB2.1(Ent ...
- [ABP教程]第三章 创建、更新和删除图书
Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...
- ASP.NET MVC Model元数据(三)
ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...
- MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- 第三章SignalR在线聊天例子
第三章SignalR在线聊天例子 本教程展示了如何使用SignalR2.0构建一个基于浏览器的聊天室程序.你将把SignalR库添加到一个空的Asp.Net Web应用程序中,创建用于发送消息到客户端 ...
- 使用Micrisoft.net设计方案 第三章Web表示模式
第三章Web表示模式 体系结构设计者在设计第一个作品时比较精简和干练.在第一次设计时,并清除自己做什么,因此比较小心谨慎.第二个作品是最危险的一个作品,此时他会对第一个作品做修饰和润色,以及把第一次设 ...
- 深入理解Magento – 第三章 – 布局,块和模板
深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第三章 – 布局,块和模板 我们接着研究Magento.根据我们第二章讲的Magento MVC的架构,我们接下来 ...
- 《精通Spring4.x企业应用开发实战》第三章
这一章节主要介绍SpringBoot的使用,也是学习的重点内容,之后就打算用SpringBoot来写后台,所以提前看一下还是很有必要的. 3.SpringBoot概况 3.1.1SpringBoot发 ...
随机推荐
- mysql create database 指定utf-8编码
CREATE DATABASE IF NOT EXISTS thinkphp DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
- TCP UDP 协议的选择
行业应用中TCP/IP传输协议和UDP协议的选择! 中国移动.中国联通推行的GPRS网络.CDMA网络已覆盖大量的区域,通过无线网络实现数据传输成为可 能.无线Modem采用GPRS.CDMA模块通过 ...
- Java线程(转)
1.Java线程的实现. 第一种方式可以通过继承Thread.在Thread类中,有许多关于线程操作的方法,比如:sleep();activeCount();等 继承Thread的代码: public ...
- 在Windowx下创建以点开头的.hatccess文件
转自:在Windowx下创建以点开头的.hatccess文件 Windows有些目录名是不能创建的,有一些文件按照常规方式也是不能创建的,如在Windows下创建文件夹名为con的目录就不行,在win ...
- POJ3613 Cow Relays [矩阵乘法 floyd类似]
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7335 Accepted: 2878 Descri ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试][关于电梯调度算法的附加思考]:刘耀先-11061183,罗凡-11061174
本文为对于电梯调度算法的三个附加题思考 1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. <1>进一步提高API定义 ...
- 安装cocoaPods遇到的坑
第一个坑 更换ruby源后,安装cocoaPods是出现以下错误:activesupport requires Ruby version >= 2.2.2 Ruby version >= ...
- C#热血传奇游戏服务端再次开源更新
2014年新春佳节即将到来,也算是送给大家的一份新年礼物.虽然这礼物貌似不给力啊哈哈.(没有用心啊 o(∩_∩)o 哈哈) 这次开源主要去掉上一次开源版本中大量指针代码,简化上手操作,并重构大部分代码 ...
- [CC150] 八皇后问题
Write an algorithm to print all ways of arranging eight queens on an 8*8 chess board so that none of ...
- 小心loadrunner成为瓶颈
最近在测试中发现一个问题,某些时候用进程跑场景的时候tps死活上不去,而用同样数量的线程跑的时候,TPS开始很高,然后很快的跌倒谷底.当遇到这个问题的时候往往就是loadrunner成为瓶颈了! 解决 ...