ASP.NET MVC中HtmlHelper控件7个大类中各个控件使用详解
HtmlHelper类在命令System.Web.Mvc.Html之中,主要由7个静态类组成,它们分别是FormExtensions类,InputExtensions类,LinkExtensions类,SelectExtensions类,TextExtensions类,ValidationExtensions类,RenderPartialExtensions类。
为了方便开发者使用HtmlHelper控件,在视图ViewPage类中设置了一个属性Html它就是HtmlHelper类型。
一.FormExtensions类
定义了3中类型的扩展方法BeginForm,BeginRouteForm,EndForm。
(1)BeginForm(实现表单定义的开始部分)
重载方法有13个:
BeginForm();
BeginForm(ObjectrouteValues);
BeginForm(RouteValueDictionaryrouteValues);
BeginForm(stringactionName,stringcontrollerName);
BeginForm(stringactionName,stringcontrollerName,objectrouteValues);
BeginForm(stringactionName,stringcontrollerName,RouteValueDictionaryrouteValues);
BeginForm(stringactionName,stringcontrollerName,FormMethodmethod);
BeginForm(stringactionName,stringcontrollerName,objectrouteValues,FormMethodmethod);
BeginForm(stringactionName,stringcontrollerName,RouteValueDictionaryrouteVaues,FormMethodmethod);
BeginForm(stringactionName,stringcontrollerName,FormMethodmethod,objecthtmlAttributes);
BeginForm(stringactionName,stringcontrollerName,FormMethodmethod,IDictionary<string,object>htmlAttributes);
BeginForm(stringactionName,stringcontrollerName,objectrouteValues,FormMethodmethod,objecthtmlAttributes);
BeginForm(stringactionName,stringcontrollerName,RouteValueDictionaryrouteValues,FormMethodmethod,IDictionary<string,object>htmlAttributes);
对于第二个重载方法可以设置如下:
Html.BeginForm(new{action="action",controller="actroller",id="2"});
在上述代码中,设置了路由值的一个实例化对象,输出的HTML语句是:
<formaction="actroller/action/2"method="post"/>
对于最后一个第十三个方法的最后一个参数是实例化对象设置相关属性的值例如class,width等。
(2)BeginRouteForm(主要实现表单定义的开始部分,以路由的方法设置action的值)
有12个重载方法:
BeginRouteForm(objectrouteValues);
BeginRouteForm(RouteValueDictionaryrouteValues);
BeginRouteForm(stringrouteName);
BeginRouteForm(stringrouteName,objectrouteValues);
BeginRouteForm(stringrouteName,RouteValueDictionaryrouteValues);
BeginRouteForm(stringrouteName,FormMethodmethod);
BeginRouteForm(stringrouteName,objectrouteValues,FormMethodmethod);
……
对于第一个重载方法:
Html.BeginRouteForm(new{action="action"});
<formaction="Home/action"method="post"/>Home是页面所在的目录
BeginForm与BeginRouteForm的区别就在于第一个的action是action第二个的action是Home/action
(3)EndForm(实现表单的定义的结束部分)
Html.EndForm();
相当于</Form>
二.InputExtensions类有5种类型的扩展方法,可在视图中设置checkBox,hidden,password,radioButton,textBox控件。
(1)CheckBox实现复选框控件有6个重载方法
CheckBox(stringname);
CheckBox(stringname,boolisChecked);
CheckBox(stringname,boolisChecked,objecthtmlAttributes);
CheckBox(stringname,objecthtmlAttributes);
CheckBox(stringname,Idictionary<string,object>htmlAttributes);
CheckBox(stringname,boolisChecked,Idictionary<string,object>htmlAttributes);
设置复选框的实现代码:
<%=Html.BeginForm("CheckBox","Home")%> <fieldset> <legend>设置字体:</lengend> <%=Html.CheckBox("MyCheckBox1",true,new{id="checkBox1"})%> <labelfor="checkBox1">黑体</label> <%=Html.CheckBox("MyCheckBox2",false,new{id="checkBox2"})%> <labelfor="checkBox1">斜体</label> <br/><br/> <inputtype="submit"value="Submit"/> </fieldset> <%Html.EndForm();%>
运行上述代码,上述复选框的设置代码对应的HTML语句:
<inputchecked="checked"id="checkBox1"name="MyCheckBox1"type="CheckBox"value="true"/> <inputname="MyCheckBox1"type="hidden"value="false"/> <inputid="checkBox2"name="MyCheckBox2"type="CheckBox"value="false"/> <inputname="MyCheckBox2"type="hidden"value="false"/>
在后台检索checkBox
publicActionResultCheckBox(FormCollectionformCollection) { boolMyCheckBox1=formCollection[0].Contains("true");//检索第一个复选框是否被选中 boolMyCheckBox2=formCollection["MyCheckBox2"].Contains("true");//检索名字是MyCheckBox2的复选框是否倍选中 ViewData["CheckBox1"]=MyCheckBox1; ViewData["CheckBox2"]=MyCheckBox2; returnView(); }
(2)Hidden表单中的隐藏数值,有4个重载方法。
Hidden(stringname);
Hidden(stringname,objectvalue);
Hidden(stringname,objectvalue,objecthtmlAttributes);
Hidden(stringname,objectvalue,Idictionary<string,object>htmlAttributes);
eg:
Html.Hidden("testName");
对应输出的Html语句如下:
<inputid="testName"name="testName"type="hidden"value=""/>
(3)Password主要是输入密码的文本框,有4个重载方法。
Hidden(stringname);
Password(stringname,objectvalue);
Password(stringname,objectvalue,objecthtmlAttributes);
Password(stringname,objectvalue,Idictionary<string,object>htmlAttributes);
eg:
Html.Password("MyPwd");
对应输出的Html语句如下:
<inputid="MyPwd"name="MyPwd"type="password"/>
--------------------------------------------------------------------------------------------
HTML扩展类的所有方法都有2个参数:
以textbox为例子
publicstaticstringTextBox(thisHtmlHelperhtmlHelper,stringname,Objectvalue,IDictionary<string,Object>htmlAttributes)
publicstaticstringTextBox(thisHtmlHelperhtmlHelper,stringname,Objectvalue,ObjecthtmlAttributes)
这2个参数代表这个html标签的属性集合。使用方法如下。
1.ActionLink
<%=Html.ActionLink("这是一个连接","Index","Home")%>
带有QueryString的写法
<%=Html.ActionLink("这是一个连接","Index","Home",new{page=1},null)%> <%=Html.ActionLink("这是一个连接","Index",new{page=1})%>
有其它Html属性的写法
<%=Html.ActionLink("这是一个连接","Index","Home",new{id="link1"})%> <%=Html.ActionLink("这是一个连接","Index",null,new{id="link1"})%>
QueryString与Html属性同时存在
<%=Html.ActionLink("这是一个连接","Index","Home",new{page=1},new{id="link1"})%> <%=Html.ActionLink("这是一个连接","Index",new{page=1},new{id="link1"})%>
生成结果为:
<ahref="/">这是一个连接</a>
带有QueryString的写法
<ahref="/?page=1">这是一个连接</a> <ahref="/?page=1">这是一个连接</a>
有其它Html属性的写法
<ahref="/?Length=4"id="link1">这是一个连接</a> <ahref="/"id="link1">这是一个连接</a>
QueryString与Html属性同时存在
<ahref="/?page=1"id="link1">这是一个连接</a> <ahref="/?page=1"id="link1">这是一个连接</a>
2.RouteLink
跟ActionLink在功能上一样。
<%=Html.RouteLink("关于","about",new{})%>
带QueryString
<%=Html.RouteLink("关于","about",new{page=1})%> <%=Html.RouteLink("关于","about",new{page=1},new{id="link1"})%>
生成结果:
<ahref="/about">关于</a> <ahref="/about?page=1">关于</a> <ahref="/about?page=1"id="link1">关于</a>
3.Form2种方法
<%using(Html.BeginForm("index","home",FormMethod.Post)){%> <%}%>
<%Html.BeginForm("index","home",FormMethod.Post);//注意这里没有=输出%> <%Html.EndForm();%>
生成结果:
<formaction="/home/index"method="post"></form>
4.TextBox
<%=Html.TextBox("input1")%> <%=Html.TextBox("input2",Model.CategoryName,new{@style="width:300px;"})%> <%=Html.TextBox("input3",ViewData["Name"],new{@style="width:300px;"})%> <%=Html.TextBoxFor(a=>a.CategoryName,new{@style="width:300px;"})%>
生成结果:
<inputid="input1"name="input1"type="text"value=""/> <inputid="input2"name="input2"style="width:300px;"type="text"value="Beverages"/> <inputid="input3"name="input3"style="width:300px;"type="text"value=""/> <inputid="CategoryName"name="CategoryName"style="width:300px;"type="text"value="Beverages"/>
5.TextArea
<%=Html.TextArea("input5",Model.CategoryName,3,9,null)%> <%=Html.TextAreaFor(a=>a.CategoryName,3,3,null)%>
生成结果:
<textareacols="9"id="input5"name="input5"rows="3">Beverages</textarea> <textareacols="3"id="CategoryName"name="CategoryName"rows="3">Beverages</textarea>
6.CheckBox
<%=Html.CheckBox("chk1",true)%> <%=Html.CheckBox("chk1",new{@class="checkBox"})%> <%=Html.CheckBoxFor(a=>a.IsVaild,new{@class="checkBox"})%>
生成结果:
<inputchecked="checked"id="chk1"name="chk1"type="checkbox"value="true"/><inputname="chk1"type="hidden"value="false"/> <inputclass="checkBox"id="chk1"name="chk1"type="checkbox"value="true"/><inputname="chk1"type="hidden"value="false"/> <inputchecked="checked"class="checkBox"id="IsVaild"name="IsVaild"type="checkbox"value="true"/><inputname="IsVaild"type="hidden"value="false"/>
7.ListBox
<%=Html.ListBox("lstBox1",(SelectList)ViewData["Categories"])%> <%=Html.ListBoxFor(a=>a.CategoryName,(SelectList)ViewData["Categories"])%>
生成结果:
<selectid="lstBox1"multiple="multiple"name="lstBox1"> <optionvalue="1">Beverages</option> <optionvalue="2">Condiments</option> <optionselected="selected"value="3">Confections</option> <optionvalue="4">DairyProducts</option> <optionvalue="5">Grains/Cereals</option> <optionvalue="6">Meat/Poultry</option> <optionvalue="7">Produce</option> <optionvalue="8">Seafood</option> </select> <selectid="CategoryName"multiple="multiple"name="CategoryName"> <optionvalue="1">Beverages</option> <optionvalue="2">Condiments</option> <optionvalue="3">Confections</option> <optionvalue="4">DairyProducts</option> <optionvalue="5">Grains/Cereals</option> <optionvalue="6">Meat/Poultry</option> <optionvalue="7">Produce</option> <optionvalue="8">Seafood</option> </select>
8.DropDownList
<%=Html.DropDownList("ddl1",(SelectList)ViewData["Categories"],"--SelectOne--")%> <%=Html.DropDownListFor(a=>a.CategoryName,(SelectList)ViewData["Categories"],"--SelectOne--",new{@class="dropdownlist"})%>
生成结果:
<selectid="ddl1"name="ddl1"> <optionvalue="">--SelectOne--</option> <optionvalue="1">Beverages</option> <optionvalue="2">Condiments</option> <optionselected="selected"value="3">Confections</option> <optionvalue="4">DairyProducts</option> <optionvalue="5">Grains/Cereals</option> <optionvalue="6">Meat/Poultry</option> <optionvalue="7">Produce</option> <optionvalue="8">Seafood</option> </select> <selectclass="dropdownlist"id="CategoryName"name="CategoryName"> <optionvalue="">--SelectOne--</option> <optionvalue="1">Beverages</option> <optionvalue="2">Condiments</option> <optionvalue="3">Confections</option> <optionvalue="4">DairyProducts</option> <optionvalue="5">Grains/Cereals</option> <optionvalue="6">Meat/Poultry</option> <optionvalue="7">Produce</option> <optionvalue="8">Seafood</option> </select>
9.Partial视图模板
webform里叫自定义控件。功能都是为了复用。但使用上自定义控件真的很难用好。
<%Html.RenderPartial("DinnerForm");%>
看清楚了没有等号的。