我正在尝试提供将数据传递到_layout.cshtml页面的最佳模式。
我正在创建一个公共基类,所有视图特定模型都是从这个基类派生出来的。这个基类将被我的_layout.cshtml识别,并用于填写用户的详细信息并在标题中加载正确的图像等。例如,这里有一个片段。
public abstract class ViewModelBase
{
public string Username { get; set; }
public string Version { get; set; }
}
在_layout.cshtml的顶部,我有......
@model MyProject.Web.Controllers.ViewModelBase
我需要一个公共区域来保存模型所需的信息,并计划使用以下模式...
以下是我的问题......
答案 0 :(得分:3)
我遵循相同的方法并使用我的其他viewModel继承的基本ViewModel类。
然后,我有一个所有控制器继承的基本控制器。在那里,我有一个方法来处理初始化视图模型:
protected T CreateViewModel<T>() where T : ViewModel.BaseViewModel, new()
{
var viewModelT = new T {
HeaderTitle = "Welcome to my domain",
VisitorUsername = this.VisitorUsername,
IsCurrentVisitorAuthenticated = this.IsCurrentVisitorAuthenticated,
//...
};
return viewModelT;
}
然后在每个控制器上,当我想创建视图模型时,我只需调用基本控制器的方法:
var vm = base.CreateViewModel<MyPageCustomViewModel>();