zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    springmvc log4j 配置
    intellij idea maven springmvc 环境搭建
    spring,property not found on type
    intellij idea maven 工程生成可执行的jar
    device eth0 does not seem to be present, delaying initialization
    macos ssh host配置及免密登陆
    centos7 搭建 docker 环境
    通过rest接口获取自增id (twitter snowflake算法)
    微信小程序开发体验
    gitbook 制作 beego 参考手册
  • 原文地址:https://www.cnblogs.com/jianglan/p/3816586.html
Copyright © 2011-2022 走看看