c# - 我的母版页使用我所有其他模型继承的 View 模型,如何简化它?

标签 c# asp.net asp.net-mvc asp.net-mvc-4

我使用的模型:

public void MasterViewModel
{
   public CurrentSession Session {get;set;}
}

然后我所有其他 View 模型看起来像:

public void LoginViewModel : MasterViewModel
{

}

问题是,我必须在每个操作中初始化我的 MasterViewModel,如下所示:

public ActionResult Index()
{
  var model = new WelcomeIndexViewModel
  {
     Session = this.GetSession(); // from my base controller
  }

  ..
}

我的基本 Controller 有方法GetSession()

是否可以以某种方式在我的基本 Controller 中设置此值,这样我就不必在每个操作方法中执行此操作?

最佳答案

您可以做的一件事是,在 BaseController 中重写 OnResultExecuting,劫持 View 模型并注入(inject) Session 变量 int,如下所示:

public class BaseController : Controller
{
    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var viewResult = filterContext.Result as ViewResult;
        if (viewResult != null)
        {
            var viewModel = viewResult.Model as MasterViewModel;
            if (viewModel != null)
            {
                viewModel.Session = GetSession();
            }
        }
        base.OnResultExecuting(filterContext);
    }
}

注意:这只是检查您是否在 Controller 中使用 return View(model);,您也可以检查其他操作结果(如部分 View 、json 等...)

希望这有帮助。

关于c# - 我的母版页使用我所有其他模型继承的 View 模型,如何简化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535292/

相关文章:

C# 延迟(异步)执行在重新启动时不可靠

asp.net - 如何将转发器中Item的客户端ID传递给javascript

c# - DbContext缓存

javascript - 在单个页面上动态创建完整的一对多关系

c# - 如何在 Entity Framework DbContext 中使用依赖注入(inject)?

asp.net-mvc - asp.net mvc 主细节

c# - CaSTLe Windsor激活错误IController,key "home"

ASP.NET Core MVC防伪

c# - 返回 Stream 的方法是如何实现的?

c# - linq to sql - 我如何重写以下内容