zoukankan      html  css  js  c++  java
  • 知识点3-6:HTML辅助方法

        顾名思义,HTML辅助方法(HTML Helper)就是用来辅助产生HTML之用,在开发View的时候一定会面对许多HTML标签,处理这些HTML的工作非常繁琐,为了降低View的复杂度,可以使用HTML辅助方法帮助你产生一些HTML标签或内容,因这些HTML标签都有固定标准的写法,所以将其包装成HTML辅助方法,可让View开发更快速,也可以避免不必要的语法错误。

        ASP.NET MVC中内建了许多HTML辅助方法,这些HTML辅助方法都是利用C#3.0的扩充方法特性,将各种不同的HTML辅助方法扩充在HtmlHelper类别里,并且都拥有多载。

        通过HTML辅助方法的讲解,可以协助你面对常见但又繁琐的HTML撰写工作,例如超链接、表单声明、表单元素、HTML编码与解码、载入分部视图页面、显示Model验证失败的错误信息等。

    1.使用HTML辅助方法输出超链接

    • @Html.ActionLink("链接文字","ActionName")
    • @Html.ActionLink("链接文字","ActionName","ControllerName")
    • @Html.ActionLink("链接文字","ActionName",new{id=123,page=5})
    • @Html.ActionLink("链接文字","ActionName",null,new{@class="btnLink"})

        使用Html.AcionLink()时,第一个参数为超链接的显示文字,此参数不可以输入空字符串、空白字符串或null值,否则会跑出The Value cannot be null or empty的异常。

        提问>>:如果想设计一个包含超链接的图片按钮,该如何操作?

        可选择用<a>超链接标签来输出,并通过CSS加上一个背景图,如下。

    <a href="@Url.Action("ActionName")" class="lnkButton"></a>

        还可以直接做一个图片超链接:

    <a href="/Home/Index"><img src="~/Images/accent.png" /></a>

        ASP.NET MVC还有另一个Html.RouteLink辅助方法,其用法与Html.ActionLink非常相似,差别仅在于输入的参数要以RouteValue为主。

    2.使用HTML辅助方法输出表单

    (1)产生表单元素

        使用using语法产生表单标签:

    @using(Html.BeginForm("About","Home"))
    {
        @Html.TextArea("Date")
        @Html.TextArea("MEMO")
        <input type="submit"/>
    }

        使用Html.BeginForm辅助方法输出的表单预设输出的method属性会是POST,如果想指定为GET的话,可以输入第三个参数,如下。

    @using(Html.BeginForm("Search","Home",FormMethod.Get))
    {
        @Html.TextArea("Keyword")
        <input type="submit" />
    }

        如果想要用HTML表单实现文件上传的功能,那么必须在输出的<form>表单标签加上一个enctype属性,且内容必须设定为multipart/form-data,如下。

    @using(Html.BeginForm("Upload","File",FormMethod.Post,new{enctype="multipart/form-data"}))
    {
        @Html.TextBox("File1","",new{type="file",size="25"})
        <input type="submit"/>
    }

        Html辅助方法并没有File方法,因此必须用TextBox方法来代替,并传入第三个参数将内建的type属性换成file即可。

    (2)模拟各种HTTP动词

        由于HTML表单无法送出DELETE这个HTTP动词,如果希望Action能够提供如同RESTful风格的方式来处理删除动作,又同时能够利用同一个表单来使用这个只能允许HttpDelete的动作的话,可以利用Html.HttpMethodOverride这个HTML辅助方法来模拟HTTP DELETE的行为,而模拟的方法其实只是加入一个隐藏栏位在表单里而已。

    @using(Html.BeginForm("DeleteMessage","Message")
    {
        @Html.HttpMethodOverride(HttpVerbs.Delete)
        @Html.Hidden("ID")
        <input type="submit" value="删除此条数据" />
    }

    (3)常用表单输入栏位

    Html.BeginForm()

    Html.EndForm()

    Html.Label()

    Html.TextBox()

    Html.TextArea()

    Html.Password()

    Html.CheckBox()

    Html.RadionButton()

    Html.DropDownList(),输出<select>标签。

    Html.ListBox()

    Html.Hidden()

    Html.ValidationSummary()

    Html.Id()

    Html.Name()

    Html.Value()

        标签和文本框使用如下:

    @Html.Label("Username","账户")
    @Html.TextBox("Username")

        标签for属性的值与input的id属性值一致的话,点击标签光标就会停留在文本框上,增加表单的易用性。Html.TextBox的多载如下:

    @Html.TextBox("Username", "will")
    @Html.TextBox("Username", "will", new { id="testID"})
    复制代码
            public ActionResult HelperSample1()
            {
                IDictionary<string, object> attr = new Dictionary<string, object>();
                attr.Add("size", "32");
                attr.Add("style", "color:red;");
                ViewData["Dictionary"] = attr;
                return View();
            }
    复制代码
    复制代码
    @{
        var htmlAttribute = ViewData["Dictionary"] as IDictionary<string, object>;
    }
    @Html.TextBox("name","Value",htmlAttribute)<br />
    @Html.Password("password","Value",htmlAttribute)<br />
    @Html.TextBox("email","Value",htmlAttribute)<br />
    @Html.TextBox("tel","Value",htmlAttribute)<br />
    @Html.Hidden("id","1")
    复制代码

        Html.DropDownList()的使用方式如下。

    复制代码
            public ActionResult HelperSample2()
            {
                List<SelectListItem> listItem = new List<SelectListItem>();
                listItem.Add(new SelectListItem { Text = "", Value = "1" });
                listItem.Add(new SelectListItem { Text = "", Value = "0" });
                ViewData["List"] = new SelectList(listItem, "Value", "Text", "");
                return View();
            }
    复制代码
    @Html.DropDownList("List", ViewData["List"] as SelectList, "请选择")

    (4)使用强类型辅助方法

        ASP.NET MVC从2.0版开始更进一步地提供了强类型的辅助方法,避免因为输入错误而导致数据没有显示或是编辑时无法存储的问题,除此之外,如果能活用这些强类型辅助方法还能提升整体开发效率。

        基本上,属于强类型的辅助方法命名方式皆为“原先的名称最后加上For”,例如,Html.TextBoxFor()或Html.LabelFor()。使用强类型辅助方法,在View页面的最上方一定要用@model定义出这个View页面的参考数据模型。

    Html.LabelFor(),显示字段的名字。

    Html.TextBoxFor()

    Html.TextAreaFor()

    Html.PasswordFor()

    Html.CheckBoxFor()

    Html.RadioButtonFor()

    Html.DropDownListFor()

    Html.ListBoxFor()

    Html.HiddenFor() ,生成HTML窗体的隐藏域。

    Html.NameFor()

    Html.ValueFor()

    Html.DisplayNameFor(),获取模型的显示名称,有时是模型实体类的名称。

    Html.DisplayTextFor()

    Html.ValidationMessageFor(),是用来显示字段验证的错误消息。

    Html.EditorFor(),用来输出表单域可编辑文本框。

        做一个例子,首页显示商品明细,点击添加商品链接,打开添加商品页面,输入信息可添加商品。商品的模型类和添加商品页面代码如下:

    复制代码
        public class Product
        {
            public int Id { get; set; }
    
            [Required]
            [DisplayName("产品名称")]
            public string Name { get; set; }
    
            [MaxLength(200)]
            [DisplayName("产品说明")]
            public string Description { get; set; }
    
            [Required]
            public int UnitPrice { get; set; }
        }
    复制代码
    复制代码
    @model MvcApplication1.Models.Product
    
    @using(Html.BeginForm())
    {
        @Html.ValidationSummary(true)
    
        <fieldset>
            <legend>产品资讯</legend>
    
            <div class="editor-lable">
                @Html.LabelFor(model=>model.Name)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model=>model.Name)
                @Html.ValidationMessageFor(model=>model.Name)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model=>model.Description)
            </div>
            <div class="editor-label">
                @Html.TextAreaFor(model=>model.Description)
                @Html.ValidationMessageFor(model=>model.Description)
            </div>
    
            <p>
                <input type="submit" />
            </p>
        </fieldset>
    }
    复制代码

    3.使用HTML辅助方法载入分部视图

        以往在ASP.NET Web form的开发经验中,对于User Control使用非常频繁,不但可以减少重复的代码,也利于将页面模块化,这个好用的概念也可以用在ASP.NET MVC中,只不过换了一个名字,称为“分部视图(Partial View)”。

    (1)什么是分部视图

        从Partial View的字面上翻译,很容易了解它就是一个片段的View,因此,可以利用Partial View把部分的HTML或显示逻辑包装起来,方便重复引用。当你将建立出来的分部视图放置于ViewShared目录时,任何Controller下的Action或View都可以载入。

        分部视图的应用范围相当广,因为是片段的HTML或显示逻辑,因此,整体重复性高或某段HTML会共同出现在多个视图页面中的网页片段,利用分部视图来开发会是不错的选择,并且基于这个优点,Ajax技术所需要的片段View也就更适合使用分部视图。

    (2)如何建立一个分部视图

        建立分部视图与建立视图的步骤一样,在项目的/Views/Shared目录上,单击鼠标右键,在弹出的快捷菜单中选择“添加”->“视图”命令。接着,选中“创建为分部视图”复选框即可。

        使用分部视图不一定需要建立相关的Action,因为它仅仅是片段的HTML,且调用时,也不会调用Action来执行。

    (3)如何载入分部视图

    Partial(HtmlHelper, String)                                          |    Html.Partial("ajaxPage")

    Partial(HtmlHelper, String, Object)                               |    Html.Partial("ajaxPage", Model)

    Partial(HtmlHelper, String, ViewDataDictionary)            |    Html.Partial("ajaxPage", ViewData["Model"])

    Partial(HtmlHelper, String, Object, ViewDataDictionary) |    Html.Partial("ajaxPage", Model, ViewData["Model"])

        例子1,分部视图OnlineUserCounter代码如下。

    <span style="color:red">线上人数:88888</span>

        在Home/Index视图中载入分部视图。

    @Html.Partial("OnlineUserCounter")

    (4)从控制器载入分部视图

    (5)使用Html.Action辅助方法载入分部视图

    4.使用视图模板输出内容

    5.自定义HTML辅助方法

        使用HTML辅助方法可以让开发View页面的过程节省不少时间,但有时候难免会觉得内建的HTML辅助方法不太够用,怎么办才好呢?ASP.NET MVC的另一项优点就是“高扩充性”,此刻就派上用场。ASP.NET MVC允许开发人员自行扩充HTML辅助方法,而且方法众多,你可以选择喜爱的方式来建立适当的HTML辅助方法。

     6.Html.ValidationSummary()可以输出表单验证失败时的错误信息摘要

  • 相关阅读:
    Docker,用任何工具链和任何语言来构建任何应用
    从Docker在Linux和Windows下的区别简单理解Docker的层次结构
    Docker在Windows下的安装以及Hello World
    (译)学习如何构建自动化、跨浏览器的JavaScript单元测试
    由Python的super()函数想到的
    PS:蓝天白云的制作
    PS:缝线颜色随着鞋帮颜色的改变发生改变.files
    Windows8 64位运行Silverlight程序不能访问WCF的解决方案
    背景图片之background的用法
    12306订票助手更新
  • 原文地址:https://www.cnblogs.com/meetyy/p/4000218.html
Copyright © 2011-2022 走看看