HTML辅助方法

我在使用HTML辅助方法在过程中的之前没注意到的细节:

1. Html.BeginForm:

用于提交表单,利用路由引擎找到提交路径。与<form>相比,当应用程序部署到一个非网站根目录或者修改了路由定义,就会出现找不到资源。

2. Html.ValidationSummary:

用来显示ModelState字典中所有验证错误的无序列表,生成<ul>展示错误信息。使用布尔类型参数来告知辅助方法错误级别显示方式。

true只显示ModelState中与模型本身有关的错误。     false是除了显示模型错误还显示属性相关的错误。

3. Html.Label:

其存在的价值除了显示附加信息,其中for特性,一般要包含相关输入元素的ID,此时如果用户单击label那么浏览器会把焦点传送给相关输入控件。在复选框和单选框较为常用。

4. Html.DropDownList和Html.ListBox(支持多项需把multiple特性设置为multiple)

后台用SelectList或MultiSelectList构建。对于SelectList构造函数的参数需要指定原始集合,作为后台值使用的属性名称(Id),作为显示文本使用的名称(Name),以及当前所选项。

5. Html.Editor(Html.EditorFor)模板辅助方法,默认和Html.TextBox的效果相同,区别在于,可以在后台通过在属性上面设置[DataType]特性来生成合适的编辑器,如[DataType(DataType.MultilineText)]则会生成多行文本。

在使用ViewData,ViewBag,进行模型绑定时注意问题:

  • 对于ViewData["Name"]和View.Name效果相同,可以认为是相同值的两种不同访问形式
  • 当设置ViewData["Name"]="XXX"时,前台用Html.TextBox("Name")或Html.TextBox("XXX",ViewData["Name"])都可以得到值,
  • 对于ModelState当模型绑定失败时也会将值保存在其查找表中的某个属性中。以便呈现视图时显示给用于它原先的错误输入形式。
  • 辅助方法查看ViewData里的内容,也可以看到其中的对象属性。如下:
public ActionResult Edit(int id)
{
  ViewBag.Student = new Student(){Name="XXX"};
  return View();
}
//视图中访问
@Html.TextBox("Student.Name")
//渲染结果
<input id="Student_Name" name="Student.Name" type="text" value="XXX"/>

注意到渲染得到的input元素id特性使用下划线替代点,因为id中使用点是非法的,id特性一般被客户端脚本使用。另外一点设置样式时class前面需要加@符号

带有连字符的C#属性名是无效的,需要用下划线替代,所有HTML辅助方法在渲染时会将属性名中下划线转换为连字符。如下例子(红色标出):

Html.BeginForm("","",FormMethod.Get,new {@class="", data_name="XXX"})
//渲染效果
<form action="" class="", method="get" data-name="XXX">

在使用强类型绑定时,对于Html.TextBox("Name")这种形式的辅助方法,当ViewData["Name"]和强类型同时存在的情况下,如何模型中Name字段为null或空字符串则会使用ViewData["Name"]中的值。

由此可以看出辅助方法在查找强类型模型对象之前会首先查看ViewData或ViewBag。

另外可以使用强类型辅助方法,除了以For为后缀和lambda表达式替换字符串外,渲染效果与之前相同,但不会造成与ViewData中的Key冲突。

渲染辅助方法

  • Html.ActionLink和Html.RouteLink:用法简单两者遵循相同的模式,但是RouteLink只可以接收路由名称,而不能接收控制器和操作的名称。各自重载方法很多

Html.ActionLink("文本显示", "操作名称", "控制器名称", new {id = 12}, null)

Html.RouteLink("文本显示", new {action="操作名称", ......})

  • Url辅助方法:Action,Content,RouteUrl
  • Html.Partial和Html.RenderPartial:不需要通过控制器中的某个操作直接渲染视图,并且需要和母版视图拥有相同的模型

Html.Partial:将部分视图渲染成字符串

RenderPartial:直接写入响应流,其用法上需要在@{}代码块中书写。拥有较好的性能

  • Html.Action和Html.RenderAction

类似于上面提到的,但是这两个执行单独的控制器操作,可以建立不同的模型和利用单独的控制器上下文,提高灵活性和重用性。

通常配合ChildActionOnlyAttribute特性使用,其可以有效避免运行时直接通过URL来调用某个控制器中的某个Action操作

时间: 2024-11-10 15:53:31

HTML辅助方法的相关文章

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

表单的使用 Action和Method特性 Action特性用以告知浏览器信息发往何处,因此,Action特性后面需要包含一个Url地址.这里的Url地址可以是相对的,也可以是绝对的.如下Form标签向Bing的search页面发送一个搜索词(输入元素的名称为q). <form action="http://www.bing.com/search"> <input name="q" type="text" /> <i

004.MVC视图、辅助方法

一.视图基础- 视图定义: 用户界面,是显示应用程序用户界面(UI)组件 Web应用程序:页面 作用: 1.输出/显示模型数据 2.出入提交 视图建议在View文件夹位置存储视图 视图引擎(了解):本意发动机,这里指的是:处理视图的软件(框架内部) ASP.NET Web窗体提供了一种视图引擎,称为Web窗体引擎 ASP.NET MVC1及MVC2版本中支持Web窗体引擎 ASP.NET MVC3版本除了支持Web窗体引擎,还提供了一种新的视图引擎,称为Razor(视图)引擎 Razor引擎更加

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

5.1 表单使用 5.1.1 action 和 method 特性 <form action="/Home/Index"> <input name="q" type="text"/> <input value="提交" type="submit" /> </form> 如果没有 method 默认是: get 方法. 5.1.2 GET 方法还是 POST 方

MVC5高级编程_表单和html辅助方法

使用HTML辅助方法关键在于 确保HTML页面链接中的URL指向正确的位置.表单元素拥有适用于模型绑定的合适名称和值,以及当模型 绑定失败时其他元素能够显示相应的错误提示消息. 1.表单的使用     @using(Html.BeginForm("Searhch", "Home", FormMethod.Get,new { target = "_blank", @class="editForm", data-validatab

MVC强类型视图、强类型HTML辅助方法

强类型视图: <table> <tr> <td>ID:</td><td><%: Model.Id %></td> </tr> <tr> <td>姓名:</td><td><%: Model.UserName %></td> </tr> <tr> <td>年龄:</td><td><

HTML辅助方法的练习一

index.cshtml @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> HTML辅助方法的练习,帮程序员脱离苦海 &

【MVC】自定义ASP.NET MVC Html辅助方法

在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么,我们就可以通过自己定义一个Html扩展方法来达到这个目的. 比如,到目前为止,Html扩展方法中没有关于<input type="file" />这类标签的辅助方法,那么我们就可以自已实现一个.本文以实现<input type="file" />

MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#logOut").click(function () { location.href = "@Url.Action("Logout", "Account")"; }); 然后再某个页面楼主用了HTML辅助方法产生表单元素,代码如下所示: @H

Asp.net MVC4.0自定义Html辅助方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; namespace MyEF.ExtentionHtmlHelper { public static class ImageHelper { //说明:因为C#3.0的扩充方法是一种特殊的静态方法,因此在开发Html辅助方法时必须声明为 //静态方

(转)表单和HTML辅助方法 - ASP.NET MVC 3

——选自<ASP.NET MVC3 高级编程(第5章)  孙远帅 译> ——微软ASP.NET MVC系列书籍地址: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-3.productCd-1118076583.html 第5章 表单和HTML辅助方法  本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 * 显示和渲染的辅助方法 顾名思义,HTML辅助方法是用来辅助HTML开发的