Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper

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

作者头像
重典
发布于 2022-04-11 04:56:02
发布于 2022-04-11 04:56:02
95200
代码可运行
举报
文章被收录于专栏:重典.NET重典.NET
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <input type="text" value='<%=ViewData["title"] %>' name="title" />

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

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

1.ActionLink

其中最常用的就是Html.ActionLink

1.1基本的使用方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.ActionLink("这是一个连接", "Index", "Home")%>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <a href="/">这是一个连接</a>

ActionLink中的三个参数分别为

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

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

1.2ActionLink中QueryString与Html属性设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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" })%>

其生成结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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代码就可以了,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <a href="#1">一章</a>
   2: <a href="javascript:void(0)" onclick="delete();">删除</a>

2.RouteLink

2.1与ActionLink

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.ActionLink("这是一个连接", "Index", "Home")%>

来说,如果用RouteLink来写就是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.RouteLink("这是一个连接", new { controller="Home",action="Index"})%>

而带上QueryString以及Html属性的ActionLink

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.ActionLink("这是一个连接", "Index" , new { page = 1 }, new { id = "link1" })%>

就可以这样来写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.RouteLink("这是一个连接", new { action = "index", page = 1 }, new { id="link1"})%>

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

2.2RouteLink使用Route规则

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: routes.MapRoute(
   2:     "about",//这是规则名
   3:     "about",//url
   4:     new {controller = "Home", action = "about"}
   5:     );

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: <%=Html.RouteLink("关于", "about", new { })%>
   2: <%=Html.RouteLink("关于", "about", new { page = 1 })%>
   3: <%=Html.RouteLink("关于", "about", new { page = 1 }, new { id = "link1" })%>

来生成如下的HTML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: <form action="/home/index" method="post">
   2: </form>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: <form action="<%=Url.Action("Index","Home")%>" method="post">
   2: </form>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   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则以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.TextBox("t1") %>

3.3表单元素绑定

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.TextBox("t1","重典") %>

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

Action:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: ViewData["name"]="重典";

View:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.TextBox("t1",ViewData["name"]) %>

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

Action:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: ViewData["t1"]="重典";

View:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.TextBox("t1") %>

这样就可以自动绑定了

3.4列表数据显示与绑定

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

Action:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: ViewData["sel1"] = new SelectList(
   2:     new[] {1, 2, 3} /*列表内容可以是数组*/
   3:     , 3 /*默认值,可以是从数据库读出的*/
   4:     );

View:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: <%=Html.DropDownList("sel1")%>

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

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

我们可以使用以下方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   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:     );
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-04-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
  在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归。所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然。
Edison Zhou
2018/08/20
7860
ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
图文ASP.Net MVC Razor页面中HtmlHelper帮助程序的写法
明志德道
2023/10/21
2220
图文ASP.Net MVC  Razor页面中HtmlHelper帮助程序的写法
ASP.NET MVC HtmlHelper类
ASP.NET MVC之 HtmlHelper 在ASP.NET MVC项目的开发中,一般会默认使用Razor视图来进行View层的编写,从而实现高效率的C#/HTML代码的混写。 示例 诸如下述代码
李郑
2018/03/01
2K0
ASP.NET MVC HtmlHelper类
ASP.NET MVC5高级编程——(4)表单和HTML辅助方法
表单辅助方法、表单元素辅助方法、链接辅助方法、PartialView和 ChildAction方法。
浩Coding
2019/07/03
3.2K0
ASP.NET MVC5高级编程——(4)表单和HTML辅助方法
ASP.NET MVC 重点教程一周年版 第八回 Helper之演化
就像Filter,它是为了解决在一类的Action之前或之后执行统一的代码而产生的。
重典
2022/04/11
3420
Asp.Net MVC4入门指南(6):验证编辑方法和编辑视图
在本节中,您将开始修改为电影控制器所新加的操作方法和视图。然后,您将添加一个自定义的搜索页。 在浏览器地址栏里追加/Movies, 浏览到Movies页面。并进入编辑(Edit)页面。 Edit(编辑
葡萄城控件
2018/01/10
4.6K0
Asp.Net MVC4入门指南(6):验证编辑方法和编辑视图
ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图。但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好。打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Data.Entity; namespace MvcMovie.Models { public class Movie
葡萄城控件
2018/01/10
7.2K0
ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
ASP.NET MVC 重点教程一周年版 第十回 请求Controller
    其实我们通常遇到的请求方式无非get/post,但是有很多Web开发人员仍然对二者分不清。
重典
2022/04/11
4320
ASP.NET MVC 重点教程一周年版 第十回 请求Controller
ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件
Bootstrap为我们提供了十几种的可复用组件,包括字体图标、下拉菜单、导航、警告框、弹出框、输入框组等。在你的Web Application中使用这些组件,将为用户提供一致和简单易用的用户体验。 Bootstrap组件本质上是结合了各种现有Bootstrap元素以及添加了一些独特Class来实现。Bootstrap元素我在上一篇文章中涉及到,具体可以参考《ASP.NET MVC使用Bootstrap系列(2)——使用Bootstrap CSS和HTML元素》。 在这篇博客中,我将继续探索Bootstr
用户1161731
2018/01/11
6.8K2
ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件
ASP.NET MVC编程——视图
1Razon语法 使用@符号后接C#或VB.NET语句的方式。 基本规则 1)变量 @后直接变量即可 2)代码块 为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中 3)“+” 对于加号连接的两个字符串变量或属性,使用小括号将他们括起来 4)插入HTML或文字 每一行前面加上“@:” 5)使用注释 使用@*和*@将要注释的部分包起来 6)用@@在页面上显示@ @using 在一个View中引入此页所需程序集的命名空间。 还可以在web.config中配置命名空间,不过将对所有的View起作用。 <
甜橙很酸
2018/03/30
3.3K0
.NET MVC第五章、模型绑定获取表单数据
输出超链接使用的HTML辅助方法是Html.ActionLink,常见的有以下3种写法:
红目香薰
2022/11/30
6910
.NET MVC第五章、模型绑定获取表单数据
ASP.NET MVC 重点教程一周年版 第一回 安装,并使ASP.NET MVC页面运行起来
从前写过一系列的ASP.NET MVC教程,ASP.NET MVC在这之后历经5个preview版本终于到今天的RC版本,而且不久就要正式推出正式版本,所以值此之际,重典也重新修正这一系列的教程,使之与时俱进。
重典
2022/04/11
7220
ASP.NET MVC 重点教程一周年版 第一回 安装,并使ASP.NET MVC页面运行起来
ASP.NET MVC 重点教程一周年版 第三回 Controller与View
首先我们自己新建一个新的Controller在Controllers上点右键,添加,Controller选项
重典
2022/04/11
4200
ASP.NET MVC 重点教程一周年版 第三回 Controller与View
【ASP.NET Core 基础知识】--MVC框架--Views和Razor语法
在ASP.NET Core的MVC(Model-View-Controller)框架中,View 扮演着呈现用户界面的角色。View负责展示应用程序的数据给用户,并接收用户的输入。它与Model和Controller协同工作,通过模型绑定从Controller获取数据,然后使用Razor语法或其他视图引擎将数据呈现为用户可见的HTML。
喵叔
2024/01/11
1.4K0
ASP.NET MVC 重点教程一周年版 第七回 UrlHelper
其实ASP.NET MVC的View是Aspx的页面,本身可以声明定义方法,那为什么要有Helper呢?
重典
2022/04/11
6870
ASP.NET MVC 重点教程一周年版 第二回 UrlRouting
你可以使用UrlRouting来配置一些URL的映射,使用户可以按你的规则来访问网站. 使用UrlRouting,一定要规定URL模式,它包括一个位置标识,它将在你请求网页时按这个规则返回给你内容. 当然,这个创建的规则完全是由你自己定义的. 上回说道如何访问index.aspx及about.aspx:
重典
2022/04/11
4040
ASP.NET MVC雕虫小技 3、Pager
上篇过后,被评为没有什么技术含量了,但我觉得这并没有什么问题,因为文章不一定会让所有人群受益,文章或适于新手,或适于熟手。但凡是对人有所启发,我觉得写文章有值得。
重典
2022/04/11
4310
ASP.NET MVC雕虫小技 3、Pager
精通MVC3摘译(2)-生成URL
处理发来的URL只是MVC中的一部分,我们也需要生成一些URL植入到我们的view中,让用户点击,并提交表单到目标controller和action,下面会介绍一些生成URL的技巧。
py3study
2020/01/09
8970
ASP.NET MVC使用Bootstrap系列(2)——使用Bootstrap CSS和HTML元素
Bootstrap提供了一套丰富CSS设置、HTML元素以及高级的栅格系统来帮助开发人员快速布局网页。所有的CSS样式和HTML元素与移动设备优先的流式栅格系统结合,能让开发人员快速轻松的构建直观的界面并且不用担心在较小的设备上响应的具体细节。 Bootstrap 栅格(Grid)系统 在移动互联网的今天,越来越多的网站被手机设备访问,移动流量在近几年猛增。Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。 栅格参数 B
用户1161731
2018/01/11
6.5K0
ASP.NET MVC使用Bootstrap系列(2)——使用Bootstrap CSS和HTML元素
[转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景
英文原文地址:http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx 翻译原文地址:http://blog.joycode.com/scottgu/archive/2007/12/10/112465.aspx 过去的几个星期内,我一直在写着讨论我们正在开发的新ASP.NET MVC框架的系列贴子。ASP.NET MVC框
菩提树下的杨过
2018/01/22
5.5K0
[转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景
推荐阅读
相关推荐
ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验