您的位置:首页 > 编程语言 > ASP

asp.ner mvc3表单和HTML辅助方法(二)

2013-07-27 17:24 435 查看
  上一讲我们说到用form标签访问mvc控制器以及如何正确显示视图结果,今天给大家介绍下mvc中的HTML辅助方法,以及如何用辅助方法来重写上次的form

  上一讲中的form表单

<form action="control/action" method="get">

  <input name="q" type="text">

  <input type="submit" value="Search">

</form>


  既然我们使用了mvc我们就应该尽量使用他的特性用Html辅助方法代劳上面这个form表单

@using (Html.BeginForm("Search", "Home", FormMethod.Get))
{
<input type="text"  name="q" />

  <input type="submit" value="Search" />
}


  BeginForm辅助方法询问路由引擎如何找到HomeController控制器的Search操作(也就是方法)在后台它使用RouteTable中Routes属性上名为GetVirtualPath的方法.

  HTML辅助方法

  HTML辅助方法是可以通过视图的HTML属性调用的方法.

  

@Html.TextArea("text","hello <br /> world");


  Textarea 辅助方法中第二个参数是要渲染的值.上面的例子是向它的值中嵌入一些Html标记,但TextArea辅助方法将产生下面的标记:

  

<textarea cols="20" id="text" name="text" rows="2">
hello <br / > world
</textarea>


  输出值是经过HTML编码的.

  在保护代码的同时,辅助方法也给出了所需程度的控制.BeginForm辅助方法的另外一个重载版本

@using (Html.BeginForm("Search", "Home", FormMethod.Get,
new { target = "_blank"}  ))
{
<input type="text"  name="q" />

  <input type="submit" value="Search" />
}


  在上面这段代码中,向BeginForm方法的htmlAttributes参数传递了一个匿名类型的对象.基本上所有的asp.net mvc 框架中的每一个HTML辅助方法在它的某个重载版本中都包含一个htmlAttributes参数.也有时可以再不同的重载版本中发现htmlAttributes参数类型是IDictionary<string,object>.就是(名/值)

上面代码会产生这样的html结果

<form action="/Home/Search" method="get" target="_blank">


  可以看到已经使用了 htmlAttributes 参数设置了 target="_blank" .在这里还要特别注意下设置class

的时候,因为class是C#语言中的保留关键字,不能用作属性标识符,所以得这样

@using (Html.BeginForm("Search", "Home", FormMethod.Get,
new { target = "_blank" , @class="editForm"}  ))
{
<input type="text"  name="q" />

  <input type="submit" value="Search" />
}


  在class前面加一个@符号即可,还有一个问题是在设置属性时带有连字符的名称(data-value),带有连字符的C#属性名是无效的,但所有的HTML辅助方法在渲染HTML时会将属性名中的下划线转换为连字符.

@using (Html.BeginForm("Search", "Home", FormMethod.Get,
new { target = "_blank" , @class="editForm", data_validatable="true"}  ))
{
<input type="text"  name="q" />

  <input type="submit" value="Search" />
}


  将会生成如下HTML代码

<form action="/Home/Search" class="editForm" data-validatatable="true" method="get" target="_blank">


  今天就到这里,谢谢大家

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: