HtmlHelper:是为了方便View的开发而产生
一、HtmlHelper -Action
普通调整首页超级链接为:<ahref="/home/index">首页</a>
当路由改变时候则需要修改,例如:<ahref="/home/index.htm">首页</a>
如果项目里面有很多超级链接,那么就需要改动很多地方,不方便。
如果写成<ahref="@Url.Action("Index","Home")">首页</a>,那么根据路由改变也不受影响。
对比:
@Url.Action("View1","Home")浏览器输出字符串: /Home/View1
@Html.Action("View1","Home")浏览器输出/Home/View1 的页面内容
@Html.ActionLink("第二页","View1","Home")浏览器输出能跳转到/Home/View1的超链接,并显示 第二页
引入Jquery插件时:
<script type="text/javascript"src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script>
二、HtmlHelper - Form
方式一:{} 强烈推荐
@using(Html.BeginForm("HandleForm","Home"))
{
}
方式二:Begin End
@Html.BeginForm()
@{Html.EndForm();}
三、HtmlHelper –弱类型与强类型方法
1.弱类型方法:指定name和value
@Html.TextBox("Title",model.Title);
<inputtype="text" id="Title" name="Title"value="ruiky"/>
@Html.RadioButton("chkHabit","篮球",true)
<inputchecked="checked" id="chkHabit" name="chkHabit" type="radio"value="篮球" />
其他控件方法也一样
2.强类型方法:通过lambda表达式指定么模型属性(@model),强类型方法名有"For"后缀。
@model Models.Dog
@Html.TextBoxFor(m=>m.Name);
<inputtype="text" id="Name" name="Name"value="ruiky"/>
四、HtmlHelper – LabelFor & 模型元数据
1.模型类的元数据包括:属性(名称和类型) 与 特性包含的值。
2.操作:
步骤一:为实体类属性设置 DisplayName特性(特性Attribute,相当于标签,带一个构造函数参数。“贴标签”就是new了一个特性对象,设置给被贴的对象,编译器会将它编译进程序集的元数据中):
[DisplayName("登录名")]
public string LoginName { get; set; }
步骤二:在页面上显示某个属性的标签说明:
@Html.LabelFor(model =>model.LoginName)
结果:生成Html源码:
<labelfor="LoginName">登录名</label>
五、HtmlHelper – Display / Editor 模型元数据
@Html.Editor / @Html.Display 可以通过读取特性值生成HTML:
第一步:贴标签
[DataType(DataType.MultilineText)]
public string Name { get; set; }
第二步:在 新增/修改 页面上显示某个属性的input标签:
@Html.EditorFor(model => model. Name)
结果:生成Html源码:
<textarea id="Name"name="Name"></textarea>
六、HtmlHelper –RenderPartial
从分部视图里取数据
@Html.RenderPartial( "Par", ViewData.Model );
@Html.RenderPartial( "~/Views/Home/Par.cshtml ", ViewData.Model);
这个方法通过接受分部视图的文件名以及相应的可变化的数据进行的呈现可重用 分部视图 显示到具体的页面中
区别:
布局页面(模板页)子页,是把自己的内容填到 布局页面上去;
分部视图:供某个页面过来取分部视图的内容。
七、HtmlHelper类 - RenderAction
在视图中请求某个 Action方法,并把返回的结果直接显示在当前调用的View中。(违反了mvc设计原则:controller调用 view,而不是 view 调用 controller),不推荐!!!
@{Html.RenderAction("Test","Home");}
八、定义验证规则:
1.Model属性添加内置验证特性,介绍用的最多的其中的四个:
[Required], [StringLength], [Range], 和[RegularExpression]
2.操作:
(1)Model层中:
public partial class BlogArticle
{
public int AId { get; set; }
public int ACate { get; set; }
public int AAuthor { get; set; }
[DisplayName("文章标题")]
[Required(ErrorMessage="标题不能为空~~!")]
[StringLength(12, MinimumLength = 2, ErrorMessage="标题长度必须在2-12个字符之内")]
[Range(0,100,ErrorMessage="必须是0-100之间的数值")]
public string ATitle { get; set; }
}
(2)客户端验证:
a.引入JS脚本支持
<scriptsrc="@Url.Content("~/Scripts/jquery.validate.min.js")"type="text/javascript"></script>
<scriptsrc="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"type="text/javascript"></script>
b.添加语句
@{Html.EnableClientValidation(true);}(MVC3中默认开启)
c.显示验证信息:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)//一次性显示所有验证信息
@Html.EditorFor(model=> model.ATitle)
@Html.ValidationMessageFor(model=> model.AId)//显示属于该属性的验证信息
}
(3)服务端验证:
控制器中使用:ModelState.IsValid 判断是否通过验证
3.自定义验证特性及应用
可以通过继承自System.ComponentModel.DataAnnotations命名空间中的ValidationAttribute基类,定义完全定制的特性。
public class EmailAttribute : RegularExpressionAttribute
{
public EmailAttribute()
:base(@"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$")
{
}
}
补:获取当前请求路径:HtmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;