一、自定义辅助器方法
1.内联辅助器方法
使用@helper标签,具有名称、参数,无返回值,结果直接放到客户端的响应之中。在运行时评估类型。
@helper ListArrayItems(string[] items) { <ul> @foreach (string str in items) { <li>@str</li> } </ul> }
<div> 水果在这:@ListArrayItems(ViewBag.Fruits) </div>
2.外部辅助器方法(扩展方法)
public static MvcHtmlString ListArrayItems(this HtmlHelper html , string[] lists) { TagBuilder tag= new TagBuilder("ul"); foreach (string str in lists) { TagBuilder itemTag = new TagBuilder("li"); itemTag.SetInnerText(str); tag.InnerHtml += itemTag.ToString(); } return new MvcHtmlString(tag.ToString()); }
@using HelperMethods.Infrastructure
.......
<div> 城市在这:@Html.ListArrayItems((string[])ViewBag.Cities) </div>
HtmlHelper类定义的有用的属性
属性 | 描述 |
RouteCollection | 返回应用程序定义的路由集合 |
ViewBag | 返回视图包数据,从动作方法传递给调用辅助器方法的视图 |
ViewContext | 返回ViewContext对象,对请求的细节以及请求的处理方式进行访问 |
ViewContext类定义的有用属性
属性 | 描述 |
Controller | 返回处理当前请求的控制器 |
HttpContext | 返回描述当前请求的HttpContext对象 |
IsChildAction | 当是子动作渲染的视图时为true |
RouteData | 返回请求路由数据 |
View | 返回已调用辅助器方法的IView实现的实例 |
TagBuilder类的一些成员
成员 | 描述 |
InnerHtml | 将元素内容设置成HTML字符串的一个属性,赋给这个属性的值将不进行编码,可以将它嵌入HTML元素 |
SetInnerText(string) | 设置HTML元素的文本内容。string参数将被编码,以安全显示 |
AddCssClass(string) | 对HTML元素添加一个CSS的class |
MergeAttribute(string,string,bool) | 对HTML元素添加一个标签属性。(参数是标签属性名称,值,是否替换已存在的同名标签属性) |
命名空间的引入可以放在/Views/web.config中。
辅助器方法:为了减少视力中的重复量,只用于最简单的内容。
分部视图:用于更复杂的标记和内容
子动作:需要实现对模型数据的操作时使用。(辅助器不是只含有少量的C#语句或C#语句多于HTML元素时建议使用子动作)
对辅助器方法中的(危险)数据进行编码:
//有选择地对辅助器方法中的数据值进行编码 string encodedMsg = html.Encode(msg); string result = string.Format("这里是信息内容:<p>{0}</p>", encodedMsg); return new MvcHtmlString(result);
二、内建的Form辅助器方法
1.创建表单元素
BeginForm辅助器方法的重载
重载 | 描述 |
BeginForm() | 创建一个表单,回递给源动作方法(引发渲染该表单的动作依法) |
BeginForm(action,controller) | 创建一个表单,回递给以字符串形式指定的动作方法和控制器 |
BeginForm(action,controller,method) | 创建一个表单,回递给以字符串形式指定的动作方法和控制器,并指定form元素中method标签属性的值 |
BeginForm(action,controller,method,attributes) | 创建一个表单,回递给以字符串形式指定的动作方法和控制器,并指定form元素中method标签属性的值,指定form元素的标签属性(对象的属性) |
BeginForm(action,controller,routeValues,method,attributes) | 创建一个表单,回递给以字符串形式指定的动作方法和控制器,并指定form元素中method标签属性的值,指定form元素的标签属性(对象的属性),为路由配置中的路由片段变量指定一个值(对象的属性对应路由变量) |
@using (Html.BeginForm( "CreatePerson", "Home", //动作方法名称,控制器名 new { id = "MyIdValue" },//路由配置中id片段变量的值 FormMethod.Post,//method标签属性的值 new { @class="personClass",data_formType="person"}//form元素其他标签属性 )){ ............ <input type="submit" value="提交"/> } // <form action="/Home/CreatePerson/MyIdValue" class="personClass" data-formType="person" method="post">
data_formType="person" 会被自动的映射成 data-formType="person"
指定表单使用路由:
@using (Html.BeginRouteForm( "Default",//路由名称 new { id = "MyIdValue" },//路由配置中id片段变量的值 FormMethod.Post,//method标签属性的值 new { @class="personClass",data_formType="person"}//form元素其他标签属性 )){
2.Input辅助器
基本Input HTML辅助器(强类型结果未输出,相似)
HTML元素 | 示例 | 输出 |
Checkbox(复选框) |
@Html.CheckBox("myCheckbox", false)@Html.CheckBorFor(x=>x.myCheckbox) |
<input id="myCheckbox" name="myCheckbox" type="checkbox" value="true" /> <input name="myCheckbox" type="hidden" value="false" /> |
Hidden field(隐藏字段) |
@Html.Hidden("myHidden", "val")@Html.HiddenFor(x=>x.myCheckbox) |
<input id="myHidden" name="myHidden" type="hidden" value="val" /> |
Radio button(单选按钮) |
@Html.RadioButton("myRadioButton", "val", true)@Html.RadioButtonFor(x=>x.myRadioButton, "val") |
<input checked="checked" id="myRadioButton" name="myRadioButton" type="radio" value="val" /> |
Password(密码框) |
@Html.Password("myPassword", "val")@Html.PasswordFor(x=>x.myPassword) |
<input id="myPassword" name="myPassword" type="password" value="val" /> |
Text area(文本域) |
@Html.TextArea("myTextArea", "val", 5, 20, null)@Html.TextAreaFor(x=>x.myTextArea, 5,20,new{}) |
<textarea cols="20" id="myTextArea" name="myTextArea" rows="5"> |
Text box(文本框) |
@Html.TextBox("myTextBox", "val")@Html.TextBoxFor(x=>x.myTextBox) |
<input id="myTextBox" name="myTextBox" type="text" value="val" /> |
Select元素 | ||
Drop-down list(下拉列表) |
@Html.DropDownList("myList",new SelectList(new[]{"A","B"}),"请选择") |
<select id="myList" name="myList"> <option value="">请选择</option> |
Drop-down list(强类型下拉列表) |
@Html.DropDownListFor(m=>m.Gender, new SelectList(new[]{"M","F"})) |
<select id="Gender" name="Gender"> <option>M</option> <option>F</option> </select> |
时间: 2024-10-11 02:17:07