在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 partialViewName,ViewDataDictionary 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="#">•••</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("MM月dd日")

</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 = "width: 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,"请选择" })

 
 

APS.NET MVC + EF (07)---表单和HTML辅助方法的更多相关文章

  1. ASP.NET MVC 3 之表单和 HTML 辅助方法(摘抄)

    ——选自<ASP.NET MVC3 高级编程(第5章) 孙远帅 译> 第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 ...

  2. 【ASP.NET MVC系列】浅谈表单和HTML辅助方法

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  3. Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101

    MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...

  4. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

    参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...

  5. 《ASP.NET MVC高级编程(4版)》读书笔记(5)表单和HTML辅助方法

    5.1 表单使用 5.1.1 action 和 method 特性 <form action="/Home/Index">     <input name=&qu ...

  6. 表单和 HTML 辅助方法– ASP.NET MVC 4 系列

           这里有一个疑问,诸如在文本编辑器中输入 HTML 元素如此简单的任务,也需要任何帮助吗?的确,输入标签名称是很容易的事,但是确保 HTML 页面链接中的 URL 指向正确的位置.表单元素 ...

  7. ASP.NET MVC3学习心得-----表单和HTML辅助方法

    5.1表单的使用 5.1.1  action和method的特性 表单是包含输入元素的容器,包含按钮.复选框.文本框等元素,表单的这些输入元素使得用户能够向页面中输入信息,并把输入信息提交给服务器.A ...

  8. ASP.NET MVC5(三):表单和HTML辅助方法

    表单的使用 Action和Method特性 Action特性用以告知浏览器信息发往何处,因此,Action特性后面需要包含一个Url地址.这里的Url地址可以是相对的,也可以是绝对的.如下Form标签 ...

  9. ASP.NET MVC5 学习系列之表单和HTML辅助方法

    一.表单 (一)Action和Method特性 Action特性用以告知浏览器信息发往何处,因此,Action特性后面需要包含一个Url地址.这里的Url地址可以是相对的,也可以是绝对的.如下Form ...

随机推荐

  1. 配置以https访问网站

    环境 centos7  nginx1.16.1 一.申请证书(已有域名) 进入阿里云控制台,点击域名(我已经弄好了,一开始是没有ssl选项) 点击免费开启ssl 点购买->选择免费版 购买成功后 ...

  2. ActiveMQ消息可靠性-持久性

    三个方面保证消息的可靠性 1.消息的持久 2.事物 3.签收 一:PERSISTENT:持久性   参数说明:1.持久   2.非持久 Java里面设置持久化和非持久 持久: 将持久性设置为持久 宕机 ...

  3. python基础之三:int、bool、str

    一.数据类型之整型的函数使用 i = print("该整型数字所占有效比特位的长度是:%d" % i.bit_length()) print(i.to_bytes(, " ...

  4. 4.通过HttpMethod执行不同的服务方法

    package Services import ( "context" "fmt" "github.com/go-kit/kit/endpoint&q ...

  5. [RN] 可播放视频的播放器版本

    可播放视频的播放器版本 "react": "16.6.3", "react-native": "0.57.8", &qu ...

  6. [RN] React Native 自定义 底部 弹出 选择框 实现

    React Native 自定义 底部选择框 实现 效果如图所示: 实现方法: 一.组件封装 CustomAlertDialog.js import React, {Component} from ' ...

  7. vue中使用过的全局API

    Vue.directive()---------全局自定义指令 Vue.filter()----------全局过滤器 Vue.$set()----------为响应式对象添加一个响应式属性 Vue. ...

  8. IntelliJ IDEA 插件推荐

    1.GenerateAllSetter 自动生成类set方法 2.GsonFormat 根据JSON创建实体 3.Lombok plugin 简化代码 4. .ignore 忽略git提交文件 5.A ...

  9. 【Codeforces】B. Div Times Mod

    B. Div Times Mod time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  10. ES6-Generator基础用法

    Generator简介: 生成器,本身是函数,执行后返回迭代对象,函数内部要配合yield使用Generator函数会分段执行,遇到yield暂停. 使用Generator注意点:function 和 ...