在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. Maven编译过程中出现的问题

    在用Jenkins编译Gitlab上代码过程中,实际使用的是Maven服务器上的打包命令,以下为打包过程中出现的问题及解决方案 问题一:Maven无法编译Snapshot版本代码 答:登录至maven ...

  2. atlas笔记

    目录 环境 Mysql+Atlas配置 atlas:mysql-proxy扩展,mysql中间件,可以实现分表.分库(sharding版本).读写分离.数据库连接池等功能! Atlas类似于Twemp ...

  3. 让Linux中的Nginx支持中文文件名

    原文:https://blog.csdn.net/soeben/article/details/79525964 首先你的服务器需要安装了UTF-8字符集在命令行里输入env|grep LANG如果显 ...

  4. 前端性能优化 css和js的加载与执行

    一个网站在浏览器端是如何进行渲染的? html本身首先会被渲染成 DOM 树,实际上 html 是最先通过网址请求过来的,请求过来之后,html 本身会由一个字节流转化成一个字符流,浏览器端拿的就是字 ...

  5. C++负数类型转换,-1对256取模

    最近在读C++ primer的时候,发现p32上写道:当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数.因此,把-1赋值给8比特大小的unsigned c ...

  6. 【JavaScript】图片加载由模糊变清晰 —— 图片优化

    开发过程中,一些图片的展示时,加载很慢很久,后来把图片缩放压成缩略图吧,速度是快了但是模糊不清,如何处理这样问题,下面就和大家分享一下自己的处理方法. 先让客户端加载像素小的缩略图: <img ...

  7. 使用ftp搭建yum仓库

    此次操作在VMware Workstation虚拟机的CentOS7.5下进行 这里使用两台Linux主机,下表是它们所使用的操作系统以及IP地址. 两台Linux主机所使用的操作系统以及IP地址 操 ...

  8. django admin 编辑页面(change page) 自定义字段, 展示数据

    最近遇到一个需求, 需要在django 的 admin 编辑页内展示由用户上传的进行反馈的图片, 还要支持点击查看原图, 所以需要在编辑页内自定义 img 标签及 a 标签进行图片的展示及点击跳转 i ...

  9. Pressure on CTRM/ETRM systems to find arbitrage

    https://www.bobsguide.com/guide/news/2019/Jul/22/pressure-on-ctrmetrm-systems-to-find-arbitrage/ For ...

  10. Win10解决修改host没有权限问题(其他文件同理) 一步都不能少哦:先添加再授权

    Step1:右键文件选择属性,选择安全,点击编辑: Step2:在弹窗中点击添加,在弹窗中点击高级: Step3:在弹窗中点击立即查找,选中当前用户,点击确定: Step4:此时选中用户已经被加入进来 ...