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

  上一讲我们说到用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 &lt;br / &gt; 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">

  今天就到这里,谢谢大家

原文地址:https://www.cnblogs.com/haidao/p/3219784.html