在 ASP.NET MVC 中使用 HTML Helpers 的那些事
在 ASP.NET MVC 中使用 HTML Helpers 方法,可以返回得到标准的 HTML 标签,就像 <input>、<button> 或者 <img> 等等。
同样,你也可以创建自己的 HTML Helpers 方法,生成更加复杂的 HTML 内容。
几种不同类型的 HTML Helpers
从以下三种类型去考察 HTML Helpers 的创建和使用
01 在 View 中创建并重复使用
@helper ListingItems(string[] items)
{
<ul>
@foreach (string item in items)
{
<li>@item</li>
}
</ul>
} <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#" })
使用 Razor @helper 在 View 中创建 ListingItems,但只能在同一个 View 中重复使用。
02 内置的 HTML Helper 方法
内置的 HTML Helper 方法是 HtmlHelper class 的扩展方法,可以划分成三种不同的使用:
02.1 标准的 HTML Helper 方法
这种,用来生成常规的 HTML 元素,参见下表
HTML Element | Example |
TextBox | @Html.TextBox("Textbox1", "val") Output: <input id="Textbox1" name="Textbox1" type="text" value="val" /> |
TextArea |
@Html.TextArea("Textarea1", "val", 5, 15, null)Output: <textarea cols="15" id="Textarea1" name="Textarea1" rows="5">val</textarea> |
Password |
@Html.Password("Password1", "val")Output: <input id="Password1" name="Password1" type="password" value="val" /> |
Hidden Field |
@Html.Hidden("Hidden1", "val")Output: <input id="Hidden1" name="Hidden1" type="hidden" value="val" /> |
CheckBox |
@Html.CheckBox("Checkbox1", false)Output: <input id="Checkbox1" name="Checkbox1" type="checkbox" value="true" /> <input name="myCheckbox" type="hidden" value="false" /> |
RadioButton |
@Html.RadioButton("Radiobutton1", "val", true)Output: <input checked="checked" id="Radiobutton1" name="Radiobutton1" type="radio" value="val" /> |
Drop-down list |
@Html.DropDownList (“DropDownList1”, new SelectList(new [] {"Male", "Female"}))Output: <select id="DropDownList1" name="DropDownList1"> <option>M</option> <option>F</option> </select> |
Multiple-select |
Html.ListBox(“ListBox1”, new MultiSelectList(new [] {"Cricket", "Chess"}))Output: <select id="ListBox1" multiple="multiple" name="ListBox1"> <option>Cricket</option> <option>Chess</option> </select> |
02.2 强类型的 HTML Helper 方法
这种,可以使用 lambda 表达式,基于 model 对象的属性来创建常规的 HTML 元素容器,并为其设置相应的 id、value、name 等,参见下表:
HTML Element | Example |
TextBox |
@Html.TextBoxFor(m=>m.Name)Output: <input id="Name" name="Name" type="text" value="Name-val" /> |
TextArea |
@Html.TextArea(m=>m.Address , 5, 15, new{}))Output: <textarea cols="15" id="Address" name=" Address " rows="5">Addressvalue</textarea> |
Password |
@Html.PasswordFor(m=>m.Password)Output: <input id="Password" name="Password" type="password"/> |
Hidden Field |
@Html.HiddenFor(m=>m.UserId)Output: <input id=" UserId" name=" UserId" type="hidden" value="UserId-val" /> |
CheckBox |
@Html.CheckBoxFor(m=>m.IsApproved)Output: <input id="Checkbox1" name="Checkbox1" type="checkbox" value="true" /> <input name="myCheckbox" type="hidden" value="false" /> |
RadioButton |
@Html.RadioButtonFor(m=>m.IsApproved, "val")Output: <input checked="checked" id="Radiobutton1" name="Radiobutton1" type="radio" value="val" /> |
Drop-down list |
@Html.DropDownListFor(m => m.Gender, new SelectList(new [] {"Male", "Female"}))Output: <select id="Gender" name="Gender"> <option>Male</option> <option>Female</option> </select> |
Multiple-select |
Html.ListBoxFor(m => m.Hobbies, new MultiSelectList(new [] {"Cricket", "Chess"}))Output: <select id="Hobbies" multiple="multiple" name="Hobbies"> <option>Cricket</option> <option>Chess</option> </select> |
02.3 模板 HTML Helper 方法
这是一种更加简便的方法,可以使用 lambda 表达式,基于 model 对象的属性来创建常规的 HTML 元素容器,并为其设置相应的 id、value、name 等。不同的是,需要为 model 属性进行数据注释(DataType attribute of DataAnnitation),例如,当你使用 DataType 为 Password 给属性进行数据注释,那么模板 HTML Helper 会自动创建一个类型为 Password 的 HTML input 元素。参见下表:
Templated Helper | Example |
Display |
Renders a read-only view of the specified model property and selects an appropriate HTML element based on property’s data type and metadata. Html.Display("Name") |
DisplayFor |
Strongly typed version of the previous helper Html.DisplayFor(m => m. Name) |
Editor |
Renders an editor for the specified model property and selects an appropriate HTML element based on property’s data type and metadata. Html.Editor("Name") |
EditorFor |
Strongly typed version of the previous helper Html.EditorFor(m => m. Name) |
03 自定义 HTML Helpers
你当然可以创建一个自己的 helper 方法,作为 HTMLHelper 的扩展方法;或者在公共类中创建一个静态方法:
using System;
using System.Linq.Expressions;
using System.Web.Mvc; namespace Test.Models
{
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;
}
}
}
还有?
作为分享,如果你还有更好的理解或补充,欢迎留言!
在 ASP.NET MVC 中使用 HTML Helpers 的那些事的更多相关文章
- 004.ASP.NET MVC中的HTML Helpers
原文链接:http://www.codeproject.com/Articles/794579/ASP-NET-MVC-HTML-Helpers-A-MUST-KNOW 1.什么是HTML Helpe ...
- 理解ASP.NET MVC中的HTML Helpers
01 内联Html Helpers @helper listItems(string[] items) { <ol> @foreach (var item in items) { < ...
- ASP.NET Identity系列02,在ASP.NET MVC中增删改查用户
本篇体验在ASP.NET MVC中使用ASP.NET Identity增删改查用户. 源码在这里:https://github.com/darrenji/UseIdentityCRUDUserInMV ...
- 2.ASP.NET MVC 中使用Crystal Report水晶报表
上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
- 在Asp.Net MVC 中配置 Serilog
Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
随机推荐
- jira任务批量操作示例
1. 获取jira任务编号 使用字段提取工具获取编号,如WQBNEWSDLDL-347,WQBNEWSDLDL-348: 字段提取正则表达式:(?<2>[\[[](?<1>[A ...
- 【转】Win8下安装SQL Server 2005无法启动服务
安装了Windows8,但是发现不支持Sql Server 2005的安装.网上找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的办法了,和大家分享一下. 1.正常安装任一版本的SQL ...
- c#项目架构搭建经验
读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms).本人狭隘,读的代码不多,范围也不广 ...
- NOI 1.5 44:第n小的质数
---恢复内容开始--- 描述 输入一个正整数n,求第n小的质数. 输入 一个不超过10000的正整数n. 输出 第n小的质数. 样例输入 10 样例输出 29 方法1:合数一定可以表示成一个比它小的 ...
- Android--RecyclerView的封装使用
1,用了很长一段时间的RecyclerView,在项目中用的频率也越来越频繁(因为踩得坑也越来越多了),或过头来看,感觉一直在写RecyclerView.Adapter中的三个方法和一个内部类,感觉很 ...
- Oracle EBS FND User Info API (转) EBS用户账号密码职责相关
. 与用户信息相关API PKG. --和用户处理有关的API FND_USER_PKG; --和用户密码处理有关的API FND_WEB_SEC; --和用户职责处理有关的API FND_USER_ ...
- 使用geoserver发布arcgis切片
arcgis map 版本:10.1,10.2,10.3均可 jre:7或者8 geoserver:2.8.2以上 切片:松散型,256*256 ,png 1:安装geoserver并独立部署geo ...
- Azure VM上传小文件
因为需要传一些脚本到Azure的VM里,有个简单方法可以实现,如下 编辑这个rdp文件 点击确定,连接远程计算机 可以在我的电脑里看到本地硬盘
- CSS颜色代码
颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十六进制 00).最高值是 255(十六进制 FF).从 0 到 25 ...
- UVa 11235 RMQ
首先讲一下RMQ算法的意思. RMQ(Range Minimum Query,RMQ)范围最小值,给出一个n个元素的数组,计算min(A[L],A[L+1],...,A[R-1],A[R]): 这里运 ...