20几岁,怕什么。
自己的感觉
说一个自己最近使用AngularJS的感受,我们之前使用mvc进行项目开发都是了解和经常使用HTML的帮助类,来完成我们前端大部分代码的编写,其实在我没有接触AngularJS之前对于这种方法还是很喜欢的,毕竟它是将.aspx页面革命掉的东西,但是随着项目中使用AngularJS我越来越喜欢这种将前后端分开的开发模式,我相信这就是以后的发展形势。但是眼下这个MVC还是要快快的用好。
:了解HTML帮助类的内在美
HTML辅助方法利用路由引擎找到HomeController控制器的Search操作,他在后台使用GetVirtualPath方法,该方法在RouteTable的Routes属性中,在global.asax中,Web应用程序注册所有的路由位置。
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
通过RouteConfig.RegisterRoutes(RouteTable.Routes);来实现我们辅助方法的实现。下面我们看下要是不需要这个,如何实现我们的辅助方法。
一般的写法:
@using (Html.BeginForm("Search","Admin",FormMethod.Post)) { <input type="text" name="text"/> <input type="submit" name="sub" value="Search"/> }
不使用HTML帮助类的写法:
@{ var context = this.ViewContext.RequestContext; //请求上下文 var values = new Routeva lueDictionary //不区分大小写的键值对集合 { {"controller","home"}, {"action","index"} }; var path = RouteTable.Routes.GetVirtualPath(context, values); //返回与路由相关的URL } <form action="@path.VirtualPath",method="POST"> <input type="text" name="text" /> <input type="submit" name="sub" value="Search" /> </form>
现在我们看要是不使用帮助类就必须写这么多的代码,可以发现VS将我们需要写的代码全都封装起来,使用起来很方便。
辅助方法工作原理
每一个Razor视图都继承了它们的基类HTML属性,HTML属性的类型是System.Web.Mvc.HtmlHelper<T>;T是一个泛型类型的参数,代表传递给视图的模型类型(默认是dynamic),这个属性提供了一些可以在视图中调用的实例方法,还有很多扩展方法(.出来,方法名称左边有一个向下的箭头)。
:常用的辅助方法
---:每一个辅助方法都有一个htmlattributs属性,可以设置页面的html属性。
---:辅助方法大多数都是检查ViewDate对象以获取要显示的当前值(ViewBag对象中所有值也可以获取到)
---:辅助方法不仅可以查看ViewData内部的数据,也可以得到模型元数据 。
- Html.BeginForm
提交表单时使用,这个一般和@using(){}一起,这样就可以释放掉资源。辅助方法在调用结束期间生成一个起始标签,并返回一个实现了接口IDisposable的对象。这样就可以在using(){]方法里面被释放掉。
- Html.ValidationSummary()
@Html.ValidationSummary(excludePropertyErrors:true) //显示模型级别的错误。
此方法用来显示ModelState字典中所有验证错误的无序列表,使用参数(bool)来告知辅助方法错误的级别。(显示与模型本身相关的错误,不显示模型属性相关的错误。)
public ActionResult Search() { ModelState.AddModelError("","模型级别的错误"); //设置为true ModelState.AddModelError("Title", "模型属性级别的错误"); //设置为false return View(); }
- Html.TextBox和Html.TextArea
都是显示文本,第一个是文本框Text,第二个是TextArea;TextArea可以设置显示指定的行数和列数。
- Html.Label
返回一个label元素,并使用String类型的参数来决定渲染的文本和for特性值。这个一般使用显示输入框的标题。将模型属性中的Display(“姓名”)显示出来。
[Display(Name = "姓名")] public string Name { get; set; }
- Html.DropDownList和Html.ListBox
这两个都是返回一个<select/>元素。DropDownList第一个是单向选择,ListBox为多项选择。
关于下拉列表,它需要一个包含