在 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 的那些事的更多相关文章

  1. 004.ASP.NET MVC中的HTML Helpers

    原文链接:http://www.codeproject.com/Articles/794579/ASP-NET-MVC-HTML-Helpers-A-MUST-KNOW 1.什么是HTML Helpe ...

  2. 理解ASP.NET MVC中的HTML Helpers

    01 内联Html Helpers @helper listItems(string[] items) { <ol> @foreach (var item in items) { < ...

  3. ASP.NET Identity系列02,在ASP.NET MVC中增删改查用户

    本篇体验在ASP.NET MVC中使用ASP.NET Identity增删改查用户. 源码在这里:https://github.com/darrenji/UseIdentityCRUDUserInMV ...

  4. 2.ASP.NET MVC 中使用Crystal Report水晶报表

    上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...

  5. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  6. 在Asp.Net MVC 中配置 Serilog

    Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  8. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

随机推荐

  1. Python学习笔记(基本功能的使用)

    整理了以前使用的几个笔记:上传到了github; python_notes 以后在慢慢更新吧:

  2. 【Python学习】函数参数传递方法四种(位置,关键字,默认值,包裹位置,包裹关键字传递)

    1. 位置传递: #--coding:utf-8-- def send(name,address): return 'package is sent to %s, located in %s' %(n ...

  3. Quartus II USB-Blaster驱动解决

    Quartus II USB-Blaster驱动解决 之前安装Quartus II 13.0,但FPGA开发板链接的USB-Blaster链接无法被Quartus识别,改装Quartus II 11. ...

  4. 为什么使用spring

    现在基本的项目都会用到spring框架,那么我们为什么要使用spring呢?下面为大家总结一下,希望大家指正. spring是一个轻量级的容器框架,其核心是IOC(控制反转也叫依赖注入)和AOP(面向 ...

  5. Select2个人使用总结

    最近项目有功能需要使用列表选多个用户,老夫偷懒使用zTree进行了多级checktree实现,不过貌似太丑,虽然对于我这种后端来说无所谓,但强迫症还是让我寻找其他代替控件. 闲话不说了,先上Selec ...

  6. Windows Phone 十八、加速计

    加速度传感器 手机的加速度传感器工作时是通过 x.y.z 三个轴的偏移来计算的 在代码基本的 API 主要集中在 Accelerometer 类型中 主要是使用该类型的对象捕获 ReadingChan ...

  7. 据库都有哪些锁 然后 Kill session

    当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait ...

  8. 对jquery分页的升级

    以前写的分页用了好久了,但是分页时除了传页面外有时还要传一些其它参数,以前操作时要把传的参数放到隐藏hidden中,分页时在取出来,这样比较麻烦,今天无事,重新包装了一下 直接上代码吧 css用了bo ...

  9. C#中Timer使用及解决重入问题

    C#中Timer使用及解决重入问题 ★介绍 首先简单介绍一下timer,这里所说的timer是指的System.Timers.timer,顾名思义,就是可以在指定的间隔是引发事件.官方介绍在这里,摘抄 ...

  10. Wireshark工控协议

    Wireshark是一个强大开源流量与协议分析工具,除了传统网络协议解码外,还支持众多主流和标准工控协议的分析与解码. 序号 协议类型 源码下载 简介 1 Siemens S7 https://git ...