快速业务通道

Asp.net MVC示例项目“Suteki.Shop”分析之ViewData

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22

使用强类型的ViewData好处有许多,比如说在IDE中就会有更好的支持,比如代码提示。同时在View 与Controller之间有更严谨的“约定”。在Suteki.Shop项目中作者对强类型的ViewPage引入 是通过MvcContrib实现的,下面就是其ViewPage<T>代码(Suteki.Shop\Views\ViewPage.cs):

public class ViewPage<T> : MvcContrib.FluentHtml.ModelViewPage<T> where T : class
{
public ViewPage() : base(new LowercaseFirstCharacterOfNameBehaviour())
{}
}

public class ViewUserControl<T> : MvcContrib.FluentHtml.ModelViewUserControl<T> where T : class
{
public ViewUserControl() : base(new LowercaseFirstCharacterOfNameBehaviour())
{}
}

可以看出ViewPage和 ViewUserControl只是对MvcContrib中ModelViewPage,ModelViewUserControl的继承,代码很简单,没 什么太多可说的。强类型的ViewData使用形如:ViewPage<TViewData>,我们可以通过打开一个 View看一下,比如“编辑用户信息”时的视图头声明部分:

<%@ Page  Title="" Language="C#"   Inherits="Suteki.Shop.ViewPage<ShopViewData>"

好了,下面就开始 正文。

首先我们要看一下Suteki.Common\ViewData文件夹下面的几个类,包括:IErrorViewData ,IMessageViewData,ViewDataBase等,其类图如下:

从图中看出, ViewDataBase是其体系“核心”, 其实现了 IMessageViewData, IErrorViewData这两个接 口。其实体代码如下:

public abstract class ViewDataBase : IMessageViewData, IErrorViewData
{
public string Message { get; set; }
public string ErrorMessage { get; set; }

public ViewDataBase WithErrorMessage(string errorMessage)
{
this.ErrorMessage = errorMessage;
return this;
}

public ViewDataBase WithMessage(string message)
{
this.Message = message;
return this;
}
}

该抽象类的属性Message,ErrorMessage分 别实现了IMessageViewData和IErrorViewData的接口属性。主要 用于显示临时操作信息(比如“ 成功添加用户”,“成功编辑用户”等)。其所提供的两个方法 “WithErrorMessage”和“WithMessage”只是对相应属性的简单绑定而已。

有了ViewDataBase之后,下面就来看一下其子类实现了,下面是相应类图:

正如前面所介绍的那样,子类中最“重要”的当属“ShopViewData”,其包括 了基本所有Model中的类型,并将它们以“属性”的方法提供出来以便于前台View使用,同时 ShopViewData还提供了与其属性相关的绑定方法(均以“With...”开头),下面就是其代码 。

public class ShopViewData : ViewDataBase
{
public Category Category { get; set; }
public IEnumerable<Category> Categories { get; set; }

public Product Product { get; set; }
public IEnumerable<Product> Products { get; set; }

public IEnumerable<Role> Roles { get; set; }

public User User { get; set; }
public IEnumerable<User> Users { get; set; }

public Basket Basket { get; set; }

public Order Order { get; set; }
public PagedList<Order> Orders { get; set; }
public OrderSearchCriteria OrderSearchCriteria { get; set; }

public IEnumerable<Country> Countries { get; set; }
public Country Country { get; set; }

public IEnumerable<CardType> CardTypes { get; set; }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号