【问题标题】:Best way to populate a base viewmodel填充基本视图模型的最佳方法
【发布时间】: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


【解决方案1】:

我会采用第二种方式,因为这样可以更清楚地了解CurrentUser 的模型值是什么,而无需在控制器中四处寻找。

【讨论】:

  • 如何编写一个填充基本视图模型的操作过滤器,然后仅将其应用于某些控制器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多