我的主页使用了一个视图模型,我的所有其他模型都从中继承,如何简化它
本文关键字:我的 模型 其他 继承 何简化 主页 视图 一个 | 更新日期: 2023-09-27 18:29:36
我使用模型:
public void MasterViewModel
{
public CurrentSession Session {get;set;}
}
然后我所有的其他视图模型看起来像:
public void LoginViewModel : MasterViewModel
{
}
问题是,我必须在每个操作中初始化我的MasterViewModel,如下所示:
public ActionResult Index()
{
var model = new WelcomeIndexViewModel
{
Session = this.GetSession(); // from my base controller
}
..
}
我的基本控制器采用GetSession()
方法
有没有可能在我的basecontroller中以某种方式设置这个值,这样我就不必在每个操作方法中都这样做了
您可以做的一件事是,在BaseController
覆盖OnResultExecuting
中,劫持视图模型并注入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);
}
}
注意:如果您在控制器中使用return View(model);
,这只是检查,您也可以检查其他操作结果(如部分视图、json等)
希望这能有所帮助。
您可以为Controller.View函数创建一个decorator函数,这将为您初始化会话。
类似
internal ActionResult ExtendedView(object model)
{
Session = this.GetSession();
return View(model);
}
然后,不要使用返回的View(model),而是使用返回的ExtendedView(model)。