我使用的模型:
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/