【发布时间】:2010-02-02 22:48:21
【问题描述】:
我项目中的每个控制器类都派生自一个基本控制器类,恰当地命名为 BaseController。
所有视图数据都包含在一个名为 BaseViewData 的类中(将来可能成为更具体的视图数据类的基本控制器)。
我在 BaseController 上创建了一个 BaseViewData 属性,因为每个控制器都需要访问强类型基础视图数据中的数据(并且 BaseController 做了一些工作来预填充一些 BaseViewData 属性)。
我这样做是因为:
如果我更改了属性,我 会得到编译时错误 检查以解决更多损坏的代码 迅速地。
练习 DRY,我已经 设法整合了很多代码 以前分散的 贯穿每个控制器。
但是,这是我第一次尝试这样做。所以我可能会忽略一个准备抬起丑陋脑袋的问题。所以:
让 BaseViewData 类成为 BaseController 类的属性是个坏主意吗?如果是,为什么?
更新 1:
我的 BaseController 看起来像(还有更多,但这应该能说明问题):
public class BaseController
{
public string Language {get; set;}
public string Locale {get; set;}
public BaseViewData Data {get; set;}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : "en";
if (l.ToLower().Contains("en"))
{
l = "en";
}
else
l = "ja";
Data.Language = l;
}
}
我的 BaseViewData 看起来像这样(同样,还有更多...):
public class BaseViewData
{
public string Language {get;set;}
public string Locale {get;set;}
public bool IsOwner {get;set;}
public string Menu1 {get;set;}
public string Menu2 {get;set;}
public string Menu3 {get;set;}
public IPagedList<TYPE> ListOfTYPE {get;set;}
etc...
}
【问题讨论】:
-
有趣的想法。我可能会自己使用 IViewData 和 BaseController。我认为我的 IViewData 只是一个共享 DTO,没有以下功能:UserId、UserName 和 IsLoggedIn 之类的......我很想看看你的 BaseViewData 中有什么。
标签: c# asp.net-mvc controller viewdata