许多时候我们会遇到如下场景

在写一个编辑数据的页面时,我们通常会写如下代码

   1: <input type="text" value='<%=ViewData["title"] %>' name="title" />

由前篇我们所讲的Helper演化,我们思考,对于这种代码我们是不是也可以用一个Helper来自动绑定数据呢

这当然是可以的,ASP.NET MVC提供了一个HtmlHelper用于生成有数据绑定的Html标签。

1.ActionLink

其中最常用的就是Html.ActionLink

1.1基本的使用方式

   1: <%=Html.ActionLink("这是一个连接", "Index", "Home")%>

在UrlRouting规则为默认规则的情况下,它生成的HTML代码为

   1: <a href="/">这是一个连接</a>

ActionLink中的三个参数分别为

  1. 显示的文字
  2. Action
  3. Controller

其中Controller可以省略,省略时指向同一Controller下的Action。

1.2ActionLink中QueryString与Html属性设置

   1: 带有QueryString的写法
   2: <%=Html.ActionLink("这是一个连接", "Index", "Home", new { page=1 },null)%>
   3: <%=Html.ActionLink("这是一个连接", "Index", new { page=1 })%>
   4: 有其它Html属性的写法
   5: <%=Html.ActionLink("这是一个连接", "Index", "Home", new { id="link1" })%>
   6: <%=Html.ActionLink("这是一个连接", "Index",null, new { id="link1" })%>
   7: QueryString与Html属性同时存在
   8: <%=Html.ActionLink("这是一个连接", "Index", "Home", new { page = 1 }, new { id = "link1" })%>
   9: <%=Html.ActionLink("这是一个连接", "Index" , new { page = 1 }, new { id = "link1" })%>

其生成结果为:

   1: 带有QueryString的写法
   2: <a href="/?page=1">这是一个连接</a>
   3: <a href="/?page=1">这是一个连接</a>
   4: 有其它Html属性的写法
   5: <a href="/?Length=4" id="link1">这是一个连接</a>
   6: <a href="/" id="link1">这是一个连接</a>
   7: QueryString与Html属性同时存在
   8: <a href="/?page=1" id="link1">这是一个连接</a>
   9: <a href="/?page=1" id="link1">这是一个连接</a>

这样就可以使用ActionLink生成近乎所有的地址连接了。

注意,如果连接中不涉及到action及controller就没有必要使用ActionLink,而是直接写HTML代码就可以了,例如

   1: <a href="#1">一章</a>
   2: <a href="javascript:void(0)" onclick="delete();">删除</a>

2.RouteLink

2.1与ActionLink

RouteLink与ActionLink相差无几,只是它的地址是由Route生成拿上面的例子

   1: <%=Html.ActionLink("这是一个连接", "Index", "Home")%>

来说,如果用RouteLink来写就是

   1: <%=Html.RouteLink("这是一个连接", new { controller="Home",action="Index"})%>

而带上QueryString以及Html属性的ActionLink

   1: <%=Html.ActionLink("这是一个连接", "Index" , new { page = 1 }, new { id = "link1" })%>

就可以这样来写

   1: <%=Html.RouteLink("这是一个连接", new { action = "index", page = 1 }, new { id="link1"})%>

其实就是用一个新建立的RouteValueDictionary的对象(new{}所实例化的对象将会等价转换为RouteValueDictionary)来替原来的Action,Controller字符串的单独指定。

2.2RouteLink使用Route规则

除了这些协同的用法,RouteLink还支持使用Route规则名来创建连接

例如我们在Global.asax文件中添加一个Route规则

   1: routes.MapRoute(
   2:     "about",//这是规则名
   3:     "about",//url
   4:     new {controller = "Home", action = "about"}
   5:     );

那么我们就可以使用这个Route规则

   1: <%=Html.RouteLink("关于", "about", new { })%>
   2: <%=Html.RouteLink("关于", "about", new { page = 1 })%>
   3: <%=Html.RouteLink("关于", "about", new { page = 1 }, new { id = "link1" })%>

来生成如下的HTML:

   1: <a href="/about">关于</a>
   2: <a href="/about?page=1">关于</a>
   3: <a href="/about?page=1" id="link1">关于</a>

3.表单

很多情况下是要生成表单元素的,正如文章开始所述,修改一个内容的情况下,我们可能要将数据与表单绑定。

3.1生成Form

我们当然可以使用纯的Html代码或UrlHelper来生成一个Form。

   1: <form action="/home/index" method="post">
   2: </form>

   1: <form action="<%=Url.Action("Index","Home")%>" method="post">
   2: </form>

但是因为是在HTML的属性中,所以还是难以维护,幸好ASP.NET MVC为我们提供了一个Helper,我们可以通过以下两种方式生成一个Form:

   1: <%using(Html.BeginForm("index","home",FormMethod.Post)){%>
   2: 表单内容
   3: <%} %>
   4: <%Html.BeginForm("index", "home", FormMethod.Post);//注意这里没有=输出%>
   5: 表单内容
   6: <%Html.EndForm(); %>

BeginForm方法类似于ActionLink的调用方式,所以ASP.NET MVC还提供了BeginRouteForm这种方法。

当然这里我们也可以使用new{}来为form的action增加querystring或HTML属性,方法与前面介绍的大同小异,参见方法列表即可。

3.2表单元素

ASP.NET MVC提供了多种表单元素的Helper。

其中包括:TextBox(类似input type=text,下面类似)、TextArea、DropDownList(select)、CheckBoxHidden、ListBox、Password、RadionButton。

注意:因为<input type=”submit” />一般情况下是不会绑定数据的所以ASP.NET MVC并未提供此Helper(曾经提供过在preview2之前)。

如果我们想提供一个input type=text 它的name为t1则以下代码:

   1: <%=Html.TextBox("t1") %>

3.3表单元素绑定

如果我们想要让上文中的t1初始时就有一个值,比如 “重典”那么我们可以按以下方式

   1: <%=Html.TextBox("t1","重典") %>

如果数据是从数据库中读取,即得到数据是从Action中获取的,那么我们可以在Action中使用ViewData传递

Action:

   1: ViewData["name"]="重典";

View:

   1: <%=Html.TextBox("t1",ViewData["name"]) %>

以上方法看似简单,其实ASP.NET MVC为我们提供了更为简便的绑定方式---只要保证ViewData的Key与Helper所生成元素的name保持一致就可以自动绑定:

Action:

   1: ViewData["t1"]="重典";

View:

   1: <%=Html.TextBox("t1") %>

这样就可以自动绑定了

3.4列表数据显示与绑定

像TextBox这种值单一的数据比较容易,但是存在的数据比较多的DropDownList或ListBox应该怎么绑定数据及初始化值呢,我们来看看下面的例子:

Action:

   1: ViewData["sel1"] = new SelectList(
   2:     new[] {1, 2, 3} /*列表内容可以是数组*/
   3:     , 3 /*默认值,可以是从数据库读出的*/
   4:     );

View:

   1: <%=Html.DropDownList("sel1")%>

这样就可以将列表内容、默认值、以及表单元素三者绑定在一起了。

而我们的列表内容并不是任何情况下都是数组的,大多情况下还是Key-Value对居多。

我们可以使用以下方式:

   1: List<SelectListItem> list = new List<SelectListItem>
   2:                               {
   3:                                   new SelectListItem {Text = "重典", Value = "1"},
   4:                                   new SelectListItem {Text = "邹健", Value = "2"},
   5:                               };
   6: ViewData["sel1"] = new SelectList(
   7:     list /*列表内容可以是数组*/
   8:     , "2" /*默认值,可以是从数据库读出的*/
   9:     );

ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper相关推荐

  1. ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper 【转】

    许多时候我们会遇到如下场景 在写一个编辑数据的页面时,我们通常会写如下代码 1: <input type="text" value='<%=ViewData[" ...

  2. ASP.NET MVC 重点教程一周年版 第二回 UrlRouting 【转】

    一.什么是UrlRouting 你可以使用UrlRouting来配置一些URL的映射,使用户可以按你的规则来访问网站. 使用UrlRouting,一定要规定URL模式,它包括一个位置标识,它将在你请求 ...

  3. ASP.NET MVC 重点教程一周年版 第八回 Helper之演化 【转】

    凡事出现必有原因 就像Filter,它是为了解决在一类的Action之前或之后执行统一的代码而产生的. 而Helper则是为了方便View的开发而产生的. 下面我们来解决几个问题,来看看Helper是 ...

  4. ASP.NET MVC 重点教程一周年版 第七回 UrlHelper 【转】

    这节讲 一下ASP.NET MVC中的Helper. 何谓Helper,其实就是在View中为了实现一些灵活功能而写的方法组. 其实ASP.NET MVC的View是Aspx的页面,本身可以声明定义方 ...

  5. ASP.NET MVC 重点教程一周年版 第八回 Helper之演化

    凡事出现必有原因 就像Filter,它是为了解决在一类的Action之前或之后执行统一的代码而产生的. 而Helper则是为了方便View的开发而产生的. 下面我们来解决几个问题,来看看Helper是 ...

  6. asp.net 报表页面模板_Stimulsoft ASP.NET MVC报表教程:在设计器中保存报表模板

    Stimulsoft Reports.Net最新版下载:https://www.evget.com/product/1071/download 本示例说明如何加载报表模板并在设计器中对其进行编辑. 首 ...

  7. 【译】ASP.NET MVC 5 教程 - 4:添加模型

    原文:[译]ASP.NET MVC 5 教程 - 4:添加模型 在本节中,我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演"Model"的角色. 我 ...

  8. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作

    摘要       本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言       ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了 ...

  9. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇

    摘要       本文对ASP.NET MVC的全局运行机理进行一个简要的介绍,以使得朋友们更好的理解后续文章. 前言       在上一篇文章中,我们实现了第一个ASP.NET MVC页面.对于没有 ...

最新文章

  1. java中的super限定
  2. 【解决方案】MySQL-5.7.9 服务无法启动-“NET HELPMSG 3534”
  3. Matlab | MATLAB编辑器:无法使用GBK编码保存文件,请改用UTF-8编码保存文件(问题解决)
  4. 【HDU - 1546】 Idiomatic Phrases Game(Dijkstra,可选map处理字符串)
  5. php批量新增数据类型,Yii框架批量插入数据扩展类的简单实现方法
  6. 运行maven项目整合ssm时的错误笔记
  7. SSH家政服务系统设计与实现答辩PPT免费下载
  8. java 错误页_《javaweb学习笔记2-jsp错误页设置》
  9. usb扩展坞同时接键盘鼠标_iPadOS 13.1连接鼠标键盘扩展坞用法说明
  10. 百度贴吧诱导用户操作CPA项目
  11. 快解析v6.5.3版本,添加端口映射教程
  12. Bandicam录制时未响应-视频MP4文件损坏修复办法
  13. matlab线性规划的最优化,【OR】Matlab求解最优化问题(1) 线性规划
  14. 网易云信 android,Android 网易云信集成(一)
  15. 什么是UI设计,深入了解UI
  16. 成功帮我拿3家大厂offer(阿里、美团、虾皮),这份Java面试宝典,简直神了
  17. 关于印发《2000国家大地坐标系推广使用技术指南》和《大地测量控制点坐标转换技术规程》的函
  18. 转载:Docker从入门到上瘾
  19. 阿里巴巴字体图标使用方法
  20. 学徒浅析Android——Android原生下载机制针对0K大小文件下载异常的分析

热门文章

  1. C++打印STAIRS 图案算法(附完整源码)
  2. C++ 值传递、指针传递、引用传递
  3. 有什么办法可以判断页面是静态还是动态?_网络营销——网络营销专员到底是教你如何选择网站页面制作...
  4. Ambari2.7.4+HDP3.1.4下sqoop增量导入只支持append模式,mysql直接进入hive的lastmodified的不支持。下面是增量的命令。
  5. B15_NumPy 矩阵库(Matrix)(empty(),zeros(),ones(),eye(),identity(),rand())
  6. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
  7. 相似度算法(http://blog.sina.com.cn/s/blog_62b83291010127bf.html)
  8. 通过js让页面中的元素上下居中的写法
  9. Android-使用AIDL进程间通信
  10. Excel多因素可重复方差分析