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库和Microsoft AJAX库(最初的Atlas)

AJAX Helper

System.Web.Mvc ..::. AjaxHelper

页面必须包含脚本
    <script src="http://www.cnblogs.com/Scripts/jquery-1.3.2.js" type="text/javascript"></script>
    <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>
<ul id="comments">        
    </ul>
    
    <% using(Ajax.BeginForm("AddComment", new AjaxOptions
                                            {
                                                HttpMethod = "POST", 
                                                UpdateTargetId = "comments",
                                                InsertionMode = InsertionMode.InsertAfter                                                
                                            })) { %>
    
        <%= Html.TextArea("Comment", new{rows=5, cols=50}) %>
        <button type="submit">Add Comment</button>
                                            
    <% } %>
    
    <h3>Ajax.Link</h3>
    
    <%= Ajax.ActionLink("Show the privacy Policy", "PrivacyPolicy", 
        new AjaxOptions{InsertionMode = InsertionMode.Replace, UpdateTargetId = "privacy"}) %>
 
    <div id="privacy"></div>

可见以上的封装简化了AJAX的处理

控制器的处理可以使用

ContentResult JsonResult等返回结果

JQuery

这个图书 Juery In Action 描述的十分详细

AutoMapper

第18章

应用场景:实现Domain Model向Presentation Model的转换[例如Domain Model的对象关系较多等等情况],比如数据类型的转换和格式化等等都可以使用这个处理,以减少View处理的复杂性

初始化

       public class AutoMapperConfiguration
       {
              public static void Configure()
              {
                    Mapper.Initialize(x => x.AddProfile<ExampleProfile>());
              }
Global.asax.cs:
       protected void Application_Start()
       {
              AutoMapperConfiguration.Configure();

AutoMapper profiles

a profile is a collection of type-mapping definitions, including rules that apply to all maps defined in the profile.

       public class ExampleProfile : Profile
       {
              protected override string ProfileName
              {
                    get { return "ViewModel"; }
              }
 
              protected override void Configure()
              {
                    AddFormatter<HtmlEncoderFormatter>();
                    ForSourceType<Name>().AddFormatter<NameFormatter>();
                    ForSourceType<decimal>()
                           .AddFormatExpression(context =>
                                  ((decimal)context.SourceValue).ToString("c"));
 
                    CreateMap<Customer, CustomerInfo>()
                           .ForMember(x => x.ShippingAddress, opt =>
                           {
                                  opt.AddFormatter<AddressFormatter>();
                                  opt.SkipFormatter<HtmlEncoderFormatter>();
                           });
 
               CreateMap<Customer, CustomerInput>().AfterMap((c, ci) => CreateSelectList(c, ci));
              }
 
              private static void CreateSelectList(Customer customer, CustomerInput input)
              {
               IEnumerable<CustomerStatus> allCustomerStatuses = Enumeration.GetAll<CustomerStatus>();
                    int selectedValue = customer.Status.Value;
               input.AllStatuses = new SelectList(allCustomerStatuses, "Value", "DisplayName", selectedValue);
              }
       }

应用

定义一个Action Filter

       public class AutoMapModelAttribute : ActionFilterAttribute
       {
              private readonly Type _destType;
              private readonly Type _sourceType;
 
              public AutoMapModelAttribute(Type sourceType, Type destType)
              {
                    _sourceType = sourceType;
                    _destType = destType;
              }
 
              public override void OnActionExecuted(ActionExecutedContext filterContext)
              {
                    object model = filterContext.Controller.ViewData.Model;
 
                    object viewModel = Mapper.Map(model, _sourceType, _destType);
 
                    filterContext.Controller.ViewData.Model = viewModel;
              }
       }

在具体的Action上述性标注即可实现转换

[AutoMapModel(typeof(IEnumerable<Customer>), typeof(IEnumerable<CustomerInfo>))]

视图可以使用转换后的类型,如上例的CustomerInfo

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

Asp.net mvc 2 in action 笔记-3 Areas AJAX AutoMapper的相关文章

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 笔记- 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 co

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