MVC之htmlhelper总结
自学习mvc以来,htmlhelper使用的也非常多,下面开始总结一下吧,由于本人比较懒,内容大部分摘自slark.net的笔记,
有人问为什么用这个htmlhelper,我就喜欢用原生的标签,这个按个人习惯吧,不过存在即是真理,微软给你封装好了,简单易扩展,何必不用呢,那我们就开始吧.
1,ActionLink
@Html.ActionLink("LinkText", "ActionName")
@Html.ActionLink("LinkText", "ActionName", "ControllerName")
@Html.ActionLink("LinkText", "ActionName", new { id = 1 })
点击在浏览器中查看。运行结果:
<a href="/DefaultController/ActionName">LinkText</a> //使用当前controller默认controller
<a href="/ControllerName/ActionName">LinkText</a> //使用指定controller
<a href="/DefaultController/ActionName/1">LinkText</a>
2,RouteLink,这种用的倒不多,直接把例子拷过来吧
RouteLink同样是用来生成HTML中的<a>标签的,但是其参数和ActionLink不同。我们这里给出能实现上面三行HTML代码的RouteLink代码:
@Html.RouteLink("LinkText", new { action = "ActionName" })
@Html.RouteLink("LinkText", new { action = "ActionName", controller = "ControllerName" })
@Html.RouteLink("LinkText", new { action = "ActionName", id = 1 })
从上面代码可以看出LinkText依然是链接显示的文字,而链接的其他信息则包含在RouteLink的第二个参数中。这个参数是个Object,它的action属性表示指向的Action而controller属性表示指向的Controller。如果没有controller属性则指向当前Controller。id属性则为要传递的参数。
3,TextBox,Hidden,Password这三种用法差不多,就直接列出来
@Html.TextBox("NameId")
@Html.TextBox("NameId","Value")
@Html.Hidden("NameId")
@Html.Hidden("NameId", "Value")
@Html.Password("NameId")
@Html.Password("NameId", "Value")
4,这里特别说明下Html.CheckBox的用法
@Html.CheckBox("NameId", true)
@Html.CheckBox("NameId", false)
<input checked="checked" id="NameId" name="NameId" type="checkbox" value="true" /><input name="NameId" type="hidden" value="false" />
<input id="NameId" name="NameId" type="checkbox" value="true" /><input name="NameId" type="hidden" value="false" />
本来,正常情况下它应该只生成一个<input type="checkbox">的标签,如果CheckBox第二个参数是true则有checked="checked"属性,表示这个框打勾。但是为什么这个标签有value="true"而且后面还有个尾巴<input name="NameId" type="hidden" value="false" />呢?
因为在我们ASP.NET MVC中这样子写的效果就是:如果这个CheckBox打勾了,那么提交之后就会传给目标页面一个NameId="true"的值,如果没打勾就会传一个NameId="false"的值。这个值就是由<input name="NameId" type="hidden" value="false" />传递的。若是没有<input name="NameId" type="hidden" value="false" />这一段,如果打勾了之后提交,仍然会传给目标页面一个NameId="true"的值,而不打勾则不会传NameId的值过去。
5,
RadioButton会生成一个<input type="radio">标签,代码如下:
@Html.RadioButton("NameId","Value", true)
@Html.RadioButton("NameId", "Value", false)
生成代码如下:
<input checked="checked" id="NameId" name="NameId" type="radio" value="Value" />
<input id="NameId" name="NameId" type="radio" value="Value" />
可以看出RadioButton和CheckBox一样都有checked参数,而RadioButton多了一个Value参数可以设置。
6,
DropDownList函数可以创建<select>标签表示的下拉菜单。在创建下拉菜单之前我们需要创建用<option>标签表示的菜单选项列表,创建方法如下:

@{
SelectListItem item;
List<SelectListItem> list = new List<SelectListItem>();
for(int i=1;i<5;i++)
{
item = new SelectListItem();
item.Text = "Text" + i;
item.Value = "Value" + i;
item.Selected = (i==2);
list.Add(item);
}
}

SelectListItem类会生成一个菜单项,其Text属性表示其显示的文字,Value属性表示其对应的值,Selected属性表示其是否被选中。上面代码生成了若干个<option>标签并且当i为2时,标签被选中。
通过下面代码可以生成包含上面选项列表的下拉菜单:
@Html.DropDownList("NameId", list)
生成的结果如下:
<select id="NameId" name="NameId">
<option value="Value1">Text1</option>
<option selected="selected" value="Value2">Text2</option>
<option value="Value3">Text3</option>
<option value="Value4">Text4</option>
</select>
可见DropDownList函数的第一个参数是其id和name,第二个参数就是其四个选项组成的List。每一个选项都有各自的Text、Value,并且第二个选项被选中。
7,
ListBox可以生成一个多选列表框,对应HTML里的<select multiple="multiple">标签,ListBox的结构和DropdownList的结构基本一样,只是多了multiple="multiple"属性。我们这里依然使用上面创建的选项列表来创建我们的ListBox,代码如下:
@Html.ListBox("NameId", list)
生成的结果如下:
<select id="NameId" multiple="multiple" name="NameId">
<option value="Value1">Text1</option>
<option selected="selected" value="Value2">Text2</option>
<option value="Value3">Text3</option>
<option value="Value4">Text4</option>
</select>
8,除了上述标签外,还有个通用的方法给这些生成的标签加上属性
例如想给一个标签添加class和style可以用下面办法:
@Html.TextBox("NameId", "Value", new { @class = "classText",@style="width:200px" })
得到结果如下:
<input class="classText" id="NameId" name="NameId" style="width:200px" type="text" value="Value" />
上面黄色标记部分即为添加的属性。其实你可以以同样的方式添加任意的属性名和属性值,都会生效。
9,Form表单
在HtmlHelper中生成表单Form会用到两个函数:BeginForm和EndForm。有两种方法可以生成<form>...</form>表单,使用方法如下所示:

@using (Html.BeginForm("actionName", "controllerName", FormMethod.Get))
{
@Html.TextBox("NameId")
<input type="submit" value="SubmitButton" />
}
@{Html.BeginForm("actionName", "controllerName", FormMethod.Post);}
@Html.TextBox("NameId")
<input type="submit" value="SubmitButton" />
@{Html.EndForm();}

仔细看上面两种生成Form方法的区别:第一种方法将Html.BeginForm()函数放入@using (){}结构中这种方法可以直接生成form的开始标记和结束标记;第二种方法先写Html.BeginForm()函数生成开始标记,再在最后写Html.EndForm()函数生成结尾标记。这两种方法生成的结果是一样的。结果如下:

<form action="/controllerName/actionName" method="get">
<input id="NameId" name="NameId" type="text" value="" />
<input type="submit" value="SubmitButton" />
</form>
<form action="/controllerName/actionName" method="post">
<input id="NameId" name="NameId" type="text" value="" />
<input type="submit" value="SubmitButton" />
</form>

从运行结果可以看出BeginForm()的第一个参数指定Action的名字,第二个参数指定Controller的名字,第三个参数指定提交的时候是用Post方法还是Get方法。上面代码中第一个Form用的是Get方法,第二个Form用的是Post方法。
其实也可以什么参数不指定,直接用的默认的本页面提交,提交方式post
@using (Html.BeginForm()){
//内容
}
10,使用TagBuilder扩展HtmlHelper方法

using System.Web.Mvc;
public static class HtmlExtensions
{
public static MvcHtmlString Submit(this HtmlHelper helper, string value)
{
var builder = new TagBuilder("input");
builder.MergeAttribute("type", "submit");
builder.MergeAttribute("value", value);
return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
}
}

我们来解读一下上面的代码:
- 首先,要用TagBuilder就要引入System.Web.Mvc类库。
- 接着我们看这个函数的参数,this HtmlHelper helper保证这个方法会被添加到HtmlHelper中,string value对应将来的提交按钮显示的文字,也就是value属性。
- var builder = new TagBuilder("input");使我们创建的标签名字设为input。
- MergeAttribute函数给创建出的元素添加属性,如MergeAttribute("type", "submit") 就是加入 type="submit" 属性。
- TagRenderMode.SelfClosing使生成的标签自我关闭,也就是说有<input />这种形式。
- 最后用MvcHtmlString作为返回值是为了使返回值不被转义,比如"<"不会被转成"<"。这是我们不想看到的。
然后我们在View中写入下面代码调用刚才写好的函数:
@Html.Submit("SubmitButton")
生成结果如下:
<input type="submit" value="SubmitButton" />
可以看到我们在函数中所设置的标签名、属性、自包含都做到了。这样我们就成功生成了自创的submit按钮。
如果这里不用TagBuilder也可以,自己去拼html,用TagBuilder更结构化,更高大上不是,但拼好的String别忘了用MvcHtmlString.Create格式化一下,我刚开始写的时候就犯过这样的错误,直接返回string,结果在页面上显示的是标签,而不是控件,然后用在View上用@Html.Raw(..)来解决,很丑陋。
11,强类型的HtmlHelper
各位看观,很抱歉告诉各位,刚才我们学习的HtmlHelper统统都是弱类型的,强类型的HtmlHelper现在闪亮登场,Htmlhelper中几乎每一个弱类型函数都会对应一个强类型函数,它们的对应关系是强类型函数名比弱类型函数名多了一个For。比如TextBox()是一个弱类型函数,那么其对应的强类型函数就是TextBoxFor()。
HtmlHelper之所以可以使用强类型,因为利用了我们的model,view上面@model 你的类
然后在文件中插入如下代码:
@Html.TextBoxFor(m =>m.Name)
这就是我们的强类型HtmlHelper函数的一个例子TextBoxFor。TextBoxFor的这个参数的意思就是取Model的Name属性。由于我们在Controller中初始化了这个值,那么这个值应该是"Name属性的值"。运行结果如下。
<input id="Name" name="Name" type="text" value="Name属性的值" />
由上面结果可以看出,属性的名字Name被赋值给了这个元素的id和name,属性值Name属性的值赋值给了value属性。这样我们就完成了一个简单的强类型HtmlHelper。
12,LabelFor标签
例子中给实体的属性是这样写的:
[Display(Name = "Name")]
public string Name { get; set; }
现在生成的代码是这样的:
[DisplayName("主键")]
public int Id { get; set; }
DisplayNameFor生成的是列名,LabelFor生成的是label标签,两都都用到DisplayName
13,DisplayFor与EditorFor
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
代码中黄色部分是对Email数据类型的描述。它的数据类型是邮件地址EmailAddress。在View中写下如下代码:
@Html.DisplayFor(m => m.Email)
@Html.EditorFor(m => m.Email)
DisplayFor和EditorFor都将Model的Email属性作为自己的参数。运行结果如下:

对应的代码如下:
<a href="mailto:xxx@163.com">xxx@163.com</a>
<input class="text-box single-line" id="Email" name="Email" type="email" value="xxx@163.com" />
从结果中可以看到由于数据类型是EmailAddress,其在显示数据时就生成了一个发送邮件的超链接。在编辑数据时就生成了一个email专用的输入框<input type="email">。
MVC之htmlhelper总结的更多相关文章
- MVC 自定义Htmlhelper扩展
在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁. 具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先 ...
- MVC中HtmlHelper用法大全参考
MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...
- asp.net MVC添加HtmlHelper扩展示例和用法
一.先创建一个HtmlHelper的扩展类,代码: using System; using System.Collections.Generic; using System.Linq; using S ...
- mvc 扩展htmlhelper
using System.Web.Mvc; namespace System.Web.Mvc{ public static class HtmlExtend { public ...
- ASP.NET MVC Razor HtmlHelper扩展和自定义控件
先看示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...
- [转]Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱 【转】
在Asp.Net MVC 1.0编程中,我们经常遇见这样的场景,在新建一个对象时候,通过HtmlHelper的方式在View模型中渲染Html控件,当填写完相关内容后,通过Form把需要新建的内容Po ...
- MVC扩展HtmlHelper,加入RadioButtonList、CheckBoxList、DropdownList
代码: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions ...
- [转]Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱
http://www.cnblogs.com/errorif/archive/2012/02/13/2349902.html 在Asp.Net MVC 1.0编程中,我们经常遇见这样的场景,在新建一个 ...
- ASP.NET MVC 扩展HtmlHelper类方法
1.扩展HtmlHelper类方法ShowPageNavigate 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
随机推荐
- HIVE-执行hive的几种方式,和把HIVE保存到本地的几种方式
网上相关教程很多,这里我主要是简单总结下几种常用的方法,方便日后查询. 第一种,在bash中直接通过hive -e命令,并用 > 输出流把执行结果输出到制定文件 hive -e "se ...
- CF 85E Guard Towers——二分图染色
题目:http://codeforces.com/contest/85/problem/E 当然是二分.然后连一个图,染色判断是不是二分图即可.方案数就是2^(连通块个数). 别真的连边!不然时间空间 ...
- 机器学习:评价分类结果(Precision - Recall 的平衡、P - R 曲线)
一.Precision - Recall 的平衡 1)基础理论 调整阈值的大小,可以调节精准率和召回率的比重: 阈值:threshold,分类边界值,score > threshold 时分类为 ...
- java继承捡漏
总结:老师真是的.讲课的时候,觉得打的比喻特别有趣,结果啊不晓得他是良苦用心.知识就是包含在里面 继承:子类继承父类,子类就可以把父类的东西拿来用 这体现在程序运行时,你会发现,子类对象可以调用父类的 ...
- IIS:template
ylbtech-IIS: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 9.返回顶部 10.返 ...
- [python] itertools库学习
最近做 cyber-dojo上的题,好几道都要用到排列组合.一开始我还老老实实自己写算法.后来一想,不对呀!python有那么多的库,为啥不用呢? 于是搜了下,发现这个:itertools 使用 he ...
- Oracle 常见进程
1 服务器进程 专用服务器连接:数据连接跟服务器上的一个进程之间存在1:1的映射 共享服务器连接:多个会话共享一个服务器进程池,由一个调度程序分配 1.1 专用服务器连接 专用服务器连接模式下,客户连 ...
- C++模板的一些巧妙功能
判断类中是否有指定名称的函数: #include<utility> #define HAS_MEMBER(member)\ template<typename T,typename. ...
- 2015.3.11 VS异步控件及进度条结合应用
1.在Form中添加 指针控件:BackgroundWorker-bgwork:进度条控件progressBar1 以及开始.取消按钮 2.开始按钮启动异步线程 private void button ...
- MySQL查询某个字段为某值的次数统计SQL语句
SELECT GoodID,sum(if(Level = 1, 1, 0)) as Better,sum(if(Level = 0, 1, 0)) as Nomal,sum(if(Level = -1 ...