【发布时间】:2011-12-05 16:34:17
【问题描述】:
我知道有两种方法可以填充基础模型视图:
第一种方式,使用 OnActionExecuted 方法:
public abstract class BaseController : Controller
{
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResultBase;
if (result != null)
{
var model = filterContext.Controller.ViewData.Model as BaseViewModel;
if (model != null)
{
model.CurrentUser = HttpContext.Current.Request.Cookies["CurrentUser"].Value;
}
}
}
第二种方式,属性获取访问器:
public abstract class BaseViewModel
{
public string CurrentUser
{
get
{
return HttpContext.Current.Request.Cookies["CurrentUser"].Value;
}
}
}
哪种方式更好?我缺少什么优点/缺点?
【问题讨论】:
-
除了你列出的两种方法之外,还有很多方法,你能把你的问题说得更具体一点吗?
-
一般来说,我正在寻找一种跨控制器共享数据的方法。我检索数据一次,将其保存到 cookie,然后使用基本视图模型访问它。如果您能再举一个例子,我将不胜感激。
-
@Mayrun - 如果它只是一个 cookie,则无需将其放在基类中,因为可以从静态上下文(例如任何地方)访问 cookie。您并不是真正共享> 数据,您只是在包装代码。这听起来像是您试图重复使用用户数据 - 为什么不将其粘贴在表单身份验证票中?
标签: asp.net-mvc-3 model-view-controller design-patterns viewmodel