标签:
Html辅助方法(HtmlHelper类)
可以通过视图的Html属性调用HTML辅助方法,也可以通过Url属性调用URL辅助方法,还可以通过Ajax属性调用Ajax辅助方法。
在控制器中也存在Url辅助方法。
所有输出模型值和特性值的辅助方法都会在渲染之前,对值进行HTML编码。例如:< 转义为 < 等。
Html辅助方法的工作原理
每个Razor视图都继承了基类的Html属性,Html属性的类型是System.Web.Mvc.HtmlHelper<T>,T代表传递给视图的模型类型(默认dynamic)。Html属性提供了一些可以在视图中调用的实例方法,更多的实际上是扩展方法(ASP.NET MVC所有的HtmlHelper扩展方法都是在System.Web.Mvc.Html(在Views/web.config里引入)这个命名空间中定义)。
常用的Html辅助方法
1、Html.BeginForm
示例: @using(Html.BeginForm("Search","Home",FormMethod.Get))
{
<input type="text" name="querystring"/>
<input type="submit" value="Search"/>
}
在服务端,BeginForm辅助方法与路由引擎协调工作生成合适的URL,从而当应用程序部署位置发生变化时,依然可以链接到正确地址。
注意:BeginForm辅助方法调用期间生成一个起始标签<form>,并返回一个实现了接口IDisposable的对象。当视图中的代码执行到结束using语句的花括号位置时,隐式调用Dipose方法生成一个结束标签</form>。
2、Html.ValidationSummary
3、Html.TextBox和Html.TextArea
示例:@Html.TextBox("Title",Model.Title)
@Html.TextArea("text","hello <br/> world",10,80,null);
结果:<input id="Title" name="Title" type="text" value="Model的Title值"/>
<textarea id="text" name="text" rows="10" cols="80">hello <br /></textarea>
4、Html.Label
示例:@Html.Label("GenreId")
结果:<label for="GenreId">Genre</label>
5、Html.DropDownList和Html.ListBox
DropDownList和ListBox辅助方法都返回一个<select/>元素,区别在于DropDownList允许单项选择,ListBox支持多项选择(将multiple特性值设置为multiple)
注意事项:在控制器中需要提供select元素的数据源
示例: public ActionResult Edit(int id)
{
var album=storeDB.Albums.Single(a=>a.AlbumId==id);
ViewBag.Genres=new SelectList(storeDB.Genres.OrderBy(g=>g.Name),"GenreId","Name",album.GenreId);
return View(album);
}
SelectList构造函数的参数指定了原始集合(数据库中的Genres表),作为value值传递给后台的属性GenreId,作为text显示文本的属性Name以及当前所选项的值album.GenreId
为了避免反射开销,也可以将上面代码的红色部分改为
ViewBag.Genres=storeDB.Genres.OrderBy(g=>g.Name).AsEnumerable()
.Select(g=>new SelectListItem{
Text=g.Name,
Value=g.GenreId.ToString(),
Selected=album.GenreId==g.GenreId
});
6、Html.ValidationMessage
示例:@Html.ValidationMessage("Title","Title中有敏感词");
结果:<span class="field-validation-error" data-valmsg-for="Title" data-valmsg-replace="false">Title中有敏感词</span>
只有当键值“Title”在模型状态中出现错误时才显示。
注意:必须先在控制器中将Title属性添加到模型状态中,即:
[HttpPost]
public ActionResult Edit(int id,FormCollection collection)
{
var album=storeDB.Albums.Find(id);
ModelState.AddModelError("Title","Title中必须含有数字");
return View(album);
}
这里"Title中必须含有数字"将被"Title中有敏感词"重写。
7、Html.Hidden
示例:@Html.Hidden("usercode","admin")
结果:<input id="usercode" name="usercode" type="hidden" value="admin"/>
8、Html.Password
示例:@Html.Password("LoginPassword")
结果:<input id="LoginPasssword" name="LoginPassword" type="password" value=""/>
9、Html.RadioButton
示例:@Html.RadioButton("color","red")
@Html.RadioButton("color","blue",true)
@Html.RadioButton("color","green")
结果:
<input id="color" name="color" type="radio" value="red"/>
<input id="color" name="color" type="radio" value="blue" checked="checked"/>
<input id="color" name="color" type="radio" value="green"/>
???id不能重复吧
10、Html.CheckBox
CheckBox辅助方法是唯一一个渲染出两个元素的辅助方法
示例:@Html.CheckBox("IsEnabled")
结果:<input id="IsEnabled" name="IsEnabled" type="checkbox" value="true"/>
<input id="IsEnabled" type="hidden" value="false"/>
HTML规范中规定浏览器只提交“选中”的复选框的值,隐藏元素保证了即便用户没有选择这个复选框,IsEnabled也有值(false)被提交。
标签:
原文地址:http://www.cnblogs.com/newstar87/p/5376568.html