我将我的应用程序类保存在一个名为“Core”(或单独的类库)的子文件夹中,并使用与KIGG示例应用程序相同的方法,但稍作改动以使我的应用程序更加干燥。
我在 /Core/ViewData/ 中创建了一个 BaseViewData 类,其中存储了常见的站点范围属性。
在此之后,我还在同一个文件夹中创建了所有视图 ViewData 类,然后从 BaseViewData 派生并具有视图特定属性。
然后我创建了一个 ApplicationController,我的所有控制器都从它派生。ApplicationController 有一个通用的 GetViewData 方法,如下所示:
protected T GetViewData<T>() where T : BaseViewData, new()
{
var viewData = new T
{
Property1 = "value1",
Property2 = this.Method() // in the ApplicationController
};
return viewData;
}
最后,在我的控制器操作中,我执行以下操作来构建我的 ViewData 模型
public ActionResult Index(int? id)
{
var viewData = this.GetViewData<PageViewData>();
viewData.Page = this.DataContext.getPage(id); // ApplicationController
ViewData.Model = viewData;
return View();
}
我认为这非常有效,它可以让你的视图保持整洁,让你的控制器保持精简。