简而言之,我想通过创建一个静态类来简化我的一些MVC页面,以便从某种数据存储中获取数据,然后根据一些内部标志返回多个视图中的一个。
internal static class StaticPageContent
{
internal static ViewModels.Display GetPage(string Map = null, int? ID = null) {...}
internal static ActionResult ReturnView(ViewModels.CMS.Display vm) {...}
}
然后,在我的任何控制器操作中,我可以称之为:
public ActionResult ActionName()
{
var vm = StaticPageContent.GetPage("/Home");
return StaticPageContent.ReturnView(vm);
}
ReturnView()方法将返回多个(共享)视图之一:
internal static ActionResult ReturnView(ViewModels.CMS.Display vm)
{
if (vm.useLoremIpsum)
return View("LoremIpsum", vm);
else
{
if (vm.canEdit)
return View("ViewReadWrite", vm);
else
return View("ViewReadOnly", vm);
}
}
从非Controller类返回View(...)对象的正确方法是什么?上面的代码将不会编译,因为View(...)是Controller类的一部分。
注意: 我相信我有这样的工作,但对我的时间的要求让我朝另一个方向发展。我希望能够打开这个项目,看看我做了什么并在这里发布。请继续关注!
答案 0 :(得分:1)
简单地说,正确的方式是不在静态类中进行的。 (IMO,当然)。特别是如果您从数据存储中获取“数据” - 这不应该是静态的。
在我看来,在基本控制器中创建一个受保护的方法,或使用子操作并使用Html.Action
将其渲染出来。
答案 1 :(得分:0)
只是实例化一个,但我不认为我会推荐这个。
http://msdn.microsoft.com/en-us/library/system.web.mvc.viewresult.aspx
var result = new ViewResult(){
ViewName = "ViewReadWrite"
}
result.ViewData.Model = vm; // ViewData may need to be instantiated first.
return result;