Asp.net mvc 2 in action 笔记- 4 自动代码生成、校验Validation
2011-05-17 08:21
447 查看
自动代码生成
T4 (Text Template Transformation Toolkit) is a little-known feature of Visual Studio. It’s a code-generation toolkit, and its templates allow us to customize how files are generated using a familiar syntax.T4MVC
Out of the box, ASP.NET MVC contains many opportunities to get tripped up with magic strings, especially with URL generation. Magic strings are string constants that are used to represent other constructs, but with an added disconnect that can lead to subtle errors that only show up at runtime. To provide some intelligence around referencing controllers, views, and actions, the T4MVC project helps by generating a hierarchical code model representation for use inside controllers and views.http://mvccontrib.codeplex.com/wikipage?title=T4MVC
■ T4MVC.tt
■ T4MVC.settings.t4
Html.ActionLink("Log On", "LogOn", "Account")
Html.ActionLink("Log On", MVC.Account.LogOn()
Html.ActionLink("Profile", MVC.Admin.Profile.Show(Html.Encode(Page.User.Identity.Name))
自定义T4模板
www.visualt4.com/downloads.html Visual T4 Editor 可以编辑和建立T4模板如
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 2\CodeTemplates\AddController
添加控制器时
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 2\CodeTemplates\AddView
添加视图时使用,可以在视图中自动基于Model生成必要的代码,减少手工输入,提高效率
下的tt文件都是基于t4进行生成的
校验Validation
服务端
System.ComponentModel.DataAnnotations 下预定义了很多的验证类
如下例
public class CompanyInput
{
[Required]
public string CompanyName { get; set; }
[DataType(DataType.EmailAddress)]
public string EmailAddress { get; set; }
}
控制器处理程序检查ModelState.IsValid确定有效性,如下例
[HttpPost]
public ActionResult Edit(CompanyInput input)
{
if (ModelState.IsValid)
{
return View("Success");
}
return View(new CompanyInput());
}
客户端
Microsft AJAX的方式:首先包含:
<script src="http://www.cnblogs.com/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
在需要验证的页面包括:
<% Html.EnableClientValidation(); %>
<h2>Client Validation</h2>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm("Edit", "Home")) { %>
<%= Html.EditorForModel() %>
<button type="submit">Submit</button>
<% } %>
The EnableClientValidation method merely turns on a flag in ViewContext. It’s the BeginForm form helper method that emits the pertinent client-side scripts to enable validation. The EnableClientValidation needs to be placed before the BeginForm method in your view to correctly enable scripts.
In our original screen with company name and email address, the model metadata is emitted as a set of JSON objects. This JSON, shown in figure 15.5, includes the model metadata information, validation information, and model information in the form of a well-structured JSON object. The generated validation information combines with the MVC validation library to act as a bridge between the client-side validation framework and the server-side model metadata emitted as JSON. For example, we can see in figure 15.5 that there seems to be some information about the CompanyName field, as well as a validation message for the required field validation.
大意是Viewer的Helper函数,根据Model的元数据信息生成客户端的验证信息
这个方式有效的把客户端、服务端的验证统一了起来
上例,察看客户端的页面代码可以看到生成的javascript代码
<script type="text/javascript">
//<![CDATA[
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"CompanyName","ReplaceValidationMessageContents":true,"ValidationMessageId":"CompanyName_validationMessage","ValidationRules":[{"ErrorMessage":"Company Name 字段是必需的。","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"EmailAddress","ReplaceValidationMessageContents":true,"ValidationMessageId":"EmailAddress_validationMessage","ValidationRules":[]}],"FormId":"form0","ReplaceValidationSummary":false});
//]]>
</script>
相关文章推荐
- Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
- ASP.NET MVC 3 配置EF自动生成模型
- asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?
- 去掉asp.net自动生成的垃圾代码的一个类
- ASP.NET MVC 5 学习教程:生成的代码详解
- 去掉asp.net自动生成的垃圾代码的一个类,
- asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)
- VS2013中web项目中自动生成的ASP.NET Identity代码思考
- ASP.NET MVC 5 学习教程:生成的代码详解
- 基于JQuery、WebApi的ASP.NET MVC插件的代码生成项目主要技术解析
- ASP.NET MVC 五 Models中使用LINQ自动生成的实体类
- Asp.net MVC + MySQl + EF Code First 不能自动生成数据库
- asp.net mvc脚手架代码生成工具
- asp.net中上传图片并生成小图片,自动添加水印的代码
- 支持MVC的代码生成运行效果 C# ASP.NET
- YbSoftwareFactory 代码生成插件【十一】:ASP.NET WebApi MVC下组织机构管理和菜单权限管理的实现
- asp.net 自定义翻页,无需外部dll控件(Asp.net自动生成三层代码 第五集 )
- 获取asp.net mvc中Html.CheckBox生成代码的值
- asp.net中上传图片并生成小图片,自动添加水印的代码 .
- 在ASP.NET MVC中修改默认代码生成/支架模板