Asp.net mvc 2 in action 笔记- 4 自动代码生成、校验Validation

自动代码生成

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>

时间: 2024-09-30 04:34:36

Asp.net mvc 2 in action 笔记- 4 自动代码生成、校验Validation的相关文章

Asp.net mvc 2 in action 笔记-1 概述、Model

受Rails成功的影响,很多的开发框架都加入了rails成功的MVC思想,如.net世界的Castle Subsonic等,微软发布的框架Asp.net MVC作为后来者,吸取了很多好的思想,而且作为微软的官方支持,代码开源,因此估计asp.net的Web开发世界这个会成为主流. 本系列是看的图书<Asp.net mvc 2 in action>的一个笔记整理 约定 ■ Content-类似CSS 和图片的静态文件 ■ Controllers-控制器类 ■ Models-模型类 ■ Scrip

Asp.net mvc 2 in action笔记 -5 MvcContrib 测试和其他

MvcContrib 第5章 MvcContrib Grid 和带进度的文件上载的使用 MVcContrib是社区开源的asp.net mvc增强和扩展库,如其中的Grid,即可高效的进行设计又可灵活的控制表格的布局[比Web Form 的GridView简化了不少] 在Codeplex.com上可以找到该项目,上面有文档,特别对于Grid有详细的例子参考,如下图 例子在MVCContrib.Extras.release.zip中 以下是帮助[在MVCContrib.release.zip中]

Asp.net mvc 2 in action 笔记-3 Areas AJAX AutoMapper

Areas 第21.22章 分组管理Controller 关键点 在Global.asax.cs增加AreaRegistration.RegisterAllAreas(); 重载AreaRegistration 的RegisterArea函数,定义路由 其他都和普通的Controller一样,每个Area下的目录也包含MVC目录 方便移植的Area:程序逻辑和视图等打包 在一个库文件中,其他我web引用即可使用,提供了例子实现. AJAX 第12.27章 MVC项目默认集成了JQuery库和Mi

Asp.net mvc 2 in action 笔记 -2 View Controller

View 第3.10章 ViewData 和强类型视图          一般情况下,定义presentation model,然后形成强类型视图,可以结合ViewData传递小的片段和简单数据,以增加代码的维护性          presentation model类中可以加入data annotations属性,控制数据的验证 HTML helper类 DisplayFor DisplayTextFor EditorFor CheckBoxFor DropDownListFor Hidde

ASP.NET MVC Web API 学习笔记---联系人增删改查

本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系人          说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟    1.       Web API中包含的方法 Action HTTP method Relative URI GetAllContact GET /api/contact GetContact GET /api/

返璞归真 asp.net mvc (3) - Controller/Action

原文:返璞归真 asp.net mvc (3) - Controller/Action[索引页][源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者:webabcd 介绍 asp.net mvc 之 Controller 和 Action Controller 类必须以字符串 "Controller" 做类名称的结尾,字符串 Controller 之前的字符串为 Controller 的名称,类中的方法名为 Action 的名称 Acti

ASP.NET MVC Web API 学习笔记----HttpClient简介

  1. HttpClient简单介绍  依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage. 问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NET Framework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处: (

为ASP.NET MVC扩展异步Action功能

异步请求处理是ASP.NET 2.0中引入的高级特性,它依托IO Complete Port,对于提高IO密集型应用程 序的吞吐量非常重要(详见原理描述和性能测试).但是目前ASP.NET MVC框架缺少异步Action功能,这 也就是老赵经常挂在嘴边的那个"目前ASP.NET MVC所缺少的非常重要的功能".在TechED 2008 China的 Session中我曾经给出过一个所谓的"解决方案",但是它复杂性之高使那个解决方案有太多限制.为了 弥补TechED上

学习ASP.NET MVC(三) Controller/Action 深入解析与应用实例

一.摘要 一个Url请求经过了Routing处理后会调用Controller的Action方法. 中间的过程是怎样的? Action方 法中返回ActionResult对象后,如何到达View的? 本文将讲解Controller的基本用法, 深入分析 Controller的运行机制, 并且提供了创建所有类型Action的代码. 值得学习ASP.NET MVC时参考. 二.承上启下 在上一篇文章中, 我已经学会了如何使用Routing获取Controller和Action, 随后的程序会调用 Co