zoukankan      html  css  js  c++  java
  • APS.NET MVC + EF (07)---表单和HTML辅助方法

    在ASP.NET MVC中,可以借助HtmlHelper 对象来输出页面内容,提高开发效率。下面,我们将介绍一些常用的辅助方法。

    7.1 HTML辅助方法

    1. BeginForm

      该辅助方法主要用来产生<form>标签,可以通过using语法来使用。

    //参数1:actionName 参数2:controllerName

    @using(Html.BeginForm("About","Home")) {

    <!-- 输出表单元素 -->

    }

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

    @using(Html.BeginForm("Search","Home",FormMethod.Get))

    {

    }

    如果想要用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"})

    }

         

    1. @Html.Lable(元素名称,元素值,元素属性)

      示例:

      @Html.Lable("GenreName","流行",new { @class="validation" })

      渲染之后代码如下

      <label class="validation" for="GenreName">流行</label>

           

    2. @Html.TextBox("元素名称",元素值,元素格式,元素属性)

      示例:

      @Html.TextBox("title", "2.5",string.Format("{0:C}",2.5) new { @class = "validation" })

      渲染之后源码如下

      <input class="validation" id="title" name="title" type="text" value="¥2.50" />

           

    3. @Html.TextArea(元素名称,元素内容,元素属性)

      示例:

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

      渲染之后源码如下

      <textarea cols="80" id="text" name="text" rows="10">hello &lt;br /&gt; world </textarea>

         

    1. @Html.Hidden (元素名称,元素值)

      示例:

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

      渲染之后源码如下

      <input id="wizardStep" name="wizardStep" type="hidden" value="1" />

           

    2. @Html.Password(元素名称",元素值,元素属性)

      示例:

      @Html.Password("UserPassword")

      渲染之后源码如下

      <input id="UserPassword" name="UserPassword" type="password" value="">

           

    3. @Html.RadioButton(元素名称,元素值)

      示例:

      @Html.RadioButton("color","red")

      渲染之后源码如下

      <input id="color" name="color" type="radio" value="red" />

           

    4. Html.CheckBox(元素名称)

      示例:

      @Html.CheckBox("IsDiscounted")

      渲染之后源码如下

      <input id="IsDiscounted" name="IsDiscounted" type="checkbox" value="true" />

      <input name="IsDiscounted" type="hidden" value="false" />

           

    说明:Html辅助方法均提供了多个版本的方法重载。

         

    7.2 强类型HTML辅助方法

    在ASP.NET MVC中,每一个Html.***()辅助方法都有一个对应的Html.***For()方法,这些方法称为强类型视图辅助方法。强类型主要体现在该方法调用时,第一个参数是一个lambda表达式,用来来指定要渲染的模型属性,lambda表达式的模型类型必须和为视图指定的模型类型(使用@model指令)一致。用lambda表达式代替字符串还有许多其他好处,其中包括智能感知、编译时检查等。例如:

    在视图顶部声明强类型视图

    @model BookShop.Models.Book

    视图部分:

    @Html.TextBoxFor(m=m.Title)

         

    7.3 渲染辅助方法

    7.3.1 Html.ActionLink

    ActionLink辅助方法能渲染一个超链接(锚标签),渲染的链接指向另一个控制器操作。

    例如:

    @Html.ActionLink("Link Text", "AnotherAction")

    这里假设采用默认路由,执行这段代码将生成如下所示的HTML标记:

    <a href = "/Home/AnotherAction">LinkText</a>

         

    当需要一个指向不同控制器操作的链接时,可通过ActionLink方法的第三个参数来指定控制器名称。例如:

    @Html.ActionLink("Link Text", "Index", "ShoppingCart")

         

    7.3.2 URL.Action

    URL.Action与HTML的ActionLink辅助方法类似,但它不是以HTML标记的形式返回构建的URL,而是以字符串的形式返回这些URL。例如:

    <span>

    @Url.Action("Browse", "Store", new {genre = "Jazz"}, null)

    </span>

    生成Html标记如下:

    <span>

    /Store/Browse?genre=Jazz

    </span>

         

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

    7.4.1 为什么要使用分部视图

    在ASP.NET MVC中,我们经常会遇到一个功能被多个页面反复使用的情况,如每一页上都显示股票行情、一个日历控件显示在多个页面中、多个页面都有登录功能等等。这个时候我们可以用分部视图来实现。(不同于之前讲的的布局页,使用布局页,相应的功能在页面中的位置、样式是一致的,不够灵活)

    布局页相当于"用户控件"。

    7.4.2 创建分部视图

    分部视图通常都是放在"Views——Shared"文件夹中。创建分部视图由两种方式。

    (1)右键"Views——Shared"文件夹添加分部视图。

    (2)右键"Views——Shared"文件夹添加视图,在"添加视图"对话框中勾选"创建为分部视图"。如图7-1所示。

     

    图7-1 创建分部视图

    也可以创建为强类型的分部视图,新建的cshtml页面是一个完全空白的页面。

    7.4.3 使用分部视图

         

    1. 使用 Html.Partial 和 Html.RenderPartial

      partial辅助方法用于将部分视图渲染成字符串。partial方法共有4个重载版本:

      public void Partial(string partialViewName)

      public void Partial(string partialViewName,object model)

      public void Partial(string partialViewNameViewDataDictionary viewData)

      public void Partial(string partialViewName,object model,ViewDataDictionary ViewData

      具有的使用方法如示例1所示。

      示例1

    <!-- 分部视图 MyVistor.cshtml -->

    @model IEnumerable<Friends.Models.VisitorModel>

    <dl class="pubListTitle">

    <dt>最近来访 <span></span></dt>

    <dd><a href="#">&#8226;&#8226;&#8226;</a></dd>

    </dl>

    <ul class="recentVisitor">

    @foreach (Friends.Models.VisitorModel v in Model)

    {

    <li>

    <img src="@Url.Content("~/images/headers/" + v.HeaderImage)"

    width="50" height="50" /><br />

    <a href="#">@v.RealName</a><br />

    @v.LastVisitTime.ToString("MMdd")

    </li>

    }

    </ul>

    <div class="clear10"></div>

         

    <!-- index.cshtml 主视图-->

    @Html.Partial("MyVistor", ViewData["Visitors"]);

       

         

    RenderPartial辅助方法与partial非常相似,但Renderpartial不是返回字符串,而是直接写入响应输出流。出于这个原因,必须把Renderpartial放入代码块中,而不能放在代码表达式中。使用方式如下:

    @{ Html.RenderPartial("MyVistor", ViewData["Visitors"])}

         

    那么应该使 Partial 还是 RenderPartial 呢?一般情况下,因为Partial相对于RenderPartial来说更方便(不必使用花括号将调用封装在代码块中),所以应该选择Partial 。然而,RenderPartial拥有较好的性能,因为它是直接写入响应流的,但这种性能优势需要大量的使用(高的网站流量或在循环中重复调用)才能看出来。

    1. 使用 Html.Action 和 Html.RenderAction

      Action提供了更多的灵活性和重用性,可以通过动作方法返回结果展示分部视图。如示例2所示。

      示例2

    //动作方法定义

    public ActionResult ListFriends(int? groupId)

    {

    //省略代码

    return PartialView("MyVistor", items)

    }

    <!-- index.cshtml 主视图-->

    @Html.Action("MyVistor", "Friend", new { userId = user.UserId, num = 6 })

       

    在分部视图的动作方法中,必须返回PartialView。

    Action和RenderAction之间仅有的不同之处在于:RenderAction可以直接写入响应流(这可以带来微弱的效率增益)。

         

    另一种用法:使用ChildActionOnly特性

    7.5 使用下拉框列表

    下拉框列表一直是使用频率非常高的页面元素,在ASP.NET MVC 中使用 Html.DropDownList()辅助方法实现。

    DropDownList()方法的重载版本如下:

       

    DropDownList(this HtmlHelper htmlHelper, string name,

    IEnumerable<SelectListItem> selectList,

    string optionLabel

    object htmlAttributes);

    参数说明:

    • name:窗体字段的名称。
    • selectList: 下拉框选项集合。
    • optionLabel: 默认选项值。
    • htmlAttributes:Html特性。

    7.5.1 静态下拉框

    所谓静态下拉框,就是指下拉框的选项为固定值。使用方法如示例3所示。

    示例3

    @{

    var items=new List<SelectListItem>();

    items.Add(new SelectListItem(){ Text="北京", Value="1" Selected=true});

    items.Add(new SelectListItem(){ Text="天津", Value="2"});

    items.Add(new SelectListItem(){ Text="上海", Value="3"});

    items.Add(new SelectListItem(){ Text="重庆", Value="4"});

    }

    @Html.DropDownList("area",items,"请选择",new {@class="myClass",

    style = " 250px;"})

       

    7.5.2 数据绑定

    DropDownList的选项数据也可以借助SelectList对象从服务器的集合中获取。SelectList的构造函数定义如下。

    public SelectList(IEnumerable items, string dataValueField,

    string dataTextField, object selectedValue);

       

    使用方法如示例4所示。

    示例4

    //控制器代码

    List<City> cities= db.Citys;

    SelectList list=new SelectList(cities,"Id","Name",cities[0].Id);

    ViewBag.Cities=list;

    return View();

       

    <!-- 视图中代码 -->

    @Html.DropDownList("area",(SelectList)ViewBag.Cities,"请选择")

      

    和其它辅助方法一样,ASP.NET MVC也提供了对应的强类型辅助方法DropDownListFor( )方法。如下所示。

    @Html.DropDownListFor(model => model.Id, (SelectList)ViewBag.Cities,"请选择" })

       

  • 相关阅读:
    Mybatis之批量更新操作
    Spring Quartz *.QRTZ_LOCKS' doesn't exist
    分析NTFS文件系统得到特定文件的内容
    设计模式笔记——设计模式原则总结
    android自己定义ViewPager之——3D效果应用
    Android混淆代码
    百度地图 Android SDK
    NYOJ17,单调递增最长子序列
    令人纠结的两行代码
    XCode中在提示窗体中对已弃用的API接口画上红线
  • 原文地址:https://www.cnblogs.com/mrfang/p/10779555.html
Copyright © 2011-2022 走看看