• asp.net mvc 3.0 知识点整理 ----- (3).HtmlHelper(Html 辅助方法)介绍


      在View视图中,Html的类型是System.Web.Mvc.HtmlHelper<T>, 所有的辅助方法都需要和ModelState交互。那么,ModelState是什么呢?它是模型绑定的附属品,并且存有模型绑定期间检测到的所有验证错误。以及用户提交用到来更新模型的原始值。
    本篇博文,我们主要来介绍下一些常用的html辅助方法的主要作用和使用方法。

    1. Html.BeginForm()和Ajax.BeginForm()

        Html.BeginForm():
      同于传统的表单提交,主要是生成表单的form值,如果表单时强类型视图,则在提交表单的时候,会自动将表单元素name名称与强类型视图中的类型实体的属性值相同的进行填充;同样在表单中,如果我们是强类型视图,则可以直接使用@Model.UserName将值输到指定位置。

    一般和using{} 一起使用,否则要在form结尾添加Html.EndForm()
      method的方法分为: post 和 get: 提交后,变量可以在URL地址栏中获取。Get提交的时候,不会改变服务器的状态,客户端重复向服务器发送Get请求对服务器不会产生负面影响。
      post: 提交表单中的所有元素,Post请求会改变服务器的状态,因此客户端重复向服务器发送Post请求会对服务器产生影响。
    使用方法: 
    @using( Html.BeginForm( "方法名", "Controller名", FormMethod.提交的方法, new { target="_blank", @class = "表单的class名,方便定义样式", @id="表单的id名,方便获取表单元素"} )){  }
    等同于:
    <form action="Controller名/方法名" method ="提交的方法" class ="表单的class名" id="表单的id名" target="_blank"></form>
      Ajax.BeginForm():
      支持异步的表单提交,可以直接用MVC自带的Ajax.BeginForm就可以很容易的完成一个异步的表单提交动作
    @using(Ajax.BeginForm(
    new AjaxOptions
    {
      UpdateTartetId ="UserLogOnContainer",
      HttpMethod ="Post",
      OnSuccess=""      
    }
    )) //提交到当前页面,提交方式是Post,异步更新模块Id为UserLogOnContainer的内容块

    也可以提交到指定的controller的action上。

    @using(Ajax.BeginForm("action","controller",null
    new AjaxOptions
    {
      UpdateTartetId ="UserLogOnContainer",
      HttpMethod ="Post",
      OnSuccess=""      
    }
    )) //提交到当前指定的controller的action下,提交方式是Post,异步更新模块Id为UserLogOnContainer的内容块

     2. Html.ValidationSummary()

    主要用来
      (1). 显示后台 ModelState.IsValid 验证失败后的提示错误信息。
      (2). 或者是后台验证通过,但是某些逻辑验证没有通过。
    比如:用户登录的时候,用户名或者密码错误。则可以手工添加错误信息 
    View页面:
    @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
    Controller可以写:
    ModelState.AddModelError("", "The user name or password provided is incorrect.");

    3.Html.ValidationMessage()

    功能和Html.ValidationSummary()类似,当ModelState字典中认证失败时,用来显示错误提示信息。
    使用方法:
    Controller中写:
    ModelState.AddModelError("Title","What a terrible name!");
    View中使用
    @Html.ValidationMessage("Title")

     4.Html.TextBox()、Html.TextArea()

    主要是用来渲染 Html的textbox和textarea。
    使用方法: 
    @Html.TextBox("title","textbox infomation") 
    @Html.TextArea("textAreaTitle","textarea <br/> infomation")
    等同于: 
    <input type="text" id="title" name="title"> 
           textbox information 
     </input>
    < textarea id="textAreaTitle" name="textAreaTitle"> 
           textarea &lt; br /&gt;  information 
    </textarea >
    输出的内容是经过html编码的。

    5.Html.Label()
    Label辅助方法将返回一个<label/>元素
    使用:Controller:
    [DisplayName("Genre")]    //显示的内容
    public int GenreId{get;set;}

    View:

    @Html.Label("GenreId")
    等同于:
    <label for="GenreId">Genre</label>

    6.Html.DropDownList()、Html.ListBox()

    两个辅助方法都返回select元素,DropDownList只允许多单选,而ListBox则允许多选
    (通过渲染的标记中的multiple特性的值设置为multiple),  后台绑定数据源一般使用SelectListItem类型。

    new SelectListItem
    {
        Text = ”显示内容“,
        Value = "对应的值",
        Selected = bool值(是否选中)
    }

    7.Html.Editor()

    用法:自定义Editor编辑器。
    具体使用方法,可以参考这篇文章: http://hi.baidu.com/scorpio_jone/item/3080aefc8133c713a7298843

    8.Html.Hidden()

    用于渲染隐藏的输入元素,一般用于在页面显示隐藏域。
    用法:

    @Html.Hidden("wizardStep", "1")

    =>

    @Html.HiddenFor(w => w.wizardStep)
    (PS:Hidden和HiddenFor具体什么差别,后面我们会提到。)
    对应Html的:
    <input id="wizardStep" name="wizardStep" type="hidden" value="1" />

    9.Html.Password()

    用于渲染密码字段。他除了不保留提交的值和使用密码掩码之外,其他基本和TextBox的辅助方法一样。
    用法:
    @Html.Password("UserPassword") 

    =>

    @Html. PasswordFor(w => w.UserPassword)
    对应Html的:
    <input id="UserPassword" name="UserPassword" type="password" value="" />

    10.Html.RadioButton()

    用于渲染单选按钮,一般都是组合使用。如下:选择性别(男/女)
    用法:
    @Html.RadioButton("Gender","Male")
    @Html.RadioButton("Gender","Female", true)
    =>  
    @Html.RadioButtonFor(m => m.Gender, "Male")
    @Html.RadioButtonFor(m => m.Gender, "Female")

    11.Html.CheckBox()

    用于渲染复选框按钮(checked 、 unchecked)。它是唯一 一个渲染两个输入元素的辅助方法。
    用法: 
    @Html.CheckBox("isChecked")
    对应于:
    <input name="isChecked" id="isChecked" type="checkbox" value="true" />
    <input name="isChecked" type="hidden" value="false"/>
    (这样的原因是:当没选中的时候,确保有值提交。)
     
    12.Html.ActionLink()、Html.RouteLink()
    Html.ActionLink():
    (1).用于渲染一个指定另外一个控制器操作的超链接,跟前面的BeginForm辅助方法一样。
    用法:
    @Html.ActionLink("Link Text 显示的链接名称", "AnotherAction 要提交的控制器方法名称")
    对应于:
    <a href="/Home/AnotherAction">Link Text</a> 
    (2).不同一个控制器则用:
    @Html.ActionLink("Link Text", "AnotherAction", "AnotherController")
    对应于:
    <a href="/AnotherController/AnotherAction">Link Text</a>
    (3).如果要传递个参数到action中,则可以用:
    @Html.ActionLink("Link Text", "AnotherAction", "AnotherController", new{ ID = 123 } )

    对应于:

    <a href="/AnotherController/AnotherAction?ID=123">Link Text</a>
    Html.RouteLink():
    和Html.ActionLink() 遵循相同的模式。但是Html.RouteLink() 可以接收路由名称,而不是接收控制器名或者方法名。
    如:
    @Html.RouteLink(
         linkText: "route:Test",
         rountName: "test",
         routeValues: new{controller="section", action="Index", id=123 }
    ) 
     
    13.Html.Partial()、Html.RenderPartial()
    (1). Html.Partial用于将分部渲染成字符串。
    (2). Html.RenderPartial是直接将用户控件嵌入到界面上。
    如:
    @{ Html.RenderPartial("LogOnUserControl"); } 

    或 

    @{ Html.RenderPartial("~/Areas/Comm/Views/Shared/LogOnUserControl.ascx"); }
    两者类似:
    @Html.Partial("AlbumDisplay") (写法较方便) =>   @{ Html.RenderPartial("AlbumDisplay"); } (性能较好)
     
    14.Html.Action()、Html.RenderAction()
    Html.RenderAction:通过Controller中的Action来调用用户控件
    Controller:
    public ActionResult UserControl()
    {
        return PartialView();
    }
    View:
    @Html.RenderAction("UserControl","Controller")

    15.Url.Action()

    Url辅助方法和Html的ActionLink和RouteLink类似。但他不是用Html标记的形式返回构建的Url,而是返回字符串形式的Url。
    <span>
        @Url.Action("Browse", "Store", new{ genre = "Jazz" }, null )
    </span>
    对应Html的
    <span>
        Store/Browse?genre=Jazz 
    </span>

    16.Url.Content()

    <script src="@Url.Content("~/Scripts/Jquery-1.10.1.min.js")" type="text/javescript"></script>

      除了上面介绍的这些Html辅助方法,还有上面提到的一些Html的For方法。那么For方法和其他的有什么异同之处呢?
    For的方法可以结合Model实体,通过lambda表达式的方法来渲染。写法:@Html.LabelFor(m => m.GenreId)等。

    参考文献:http://www.tuicool.com/articles/MRJNre

  • 相关阅读:
    Ajax中onreadystatechange函数不执行,是因为放在open()后
    js调用ajax案例2,使用ok
    js调用ajax案例
    通过设置ie的通过跨域访问数据源,来访问本地服务
    Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题
    Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较
    windows 系统纯净版官网下载地址
    iOS:给Git仓库上传代码时,超过100M会被拒绝(例如github和oschina)
    iOS:Xcode8以下真机测试iOS10.0和iOS10.1配置包
    iOS:高德地图的使用
  • 原文地址:https://www.cnblogs.com/jianglan/p/3816586.html
Copyright © 2020-2023  润新知