MVC3:从非Controller类返回一个View对象

时间:2011-10-04 04:33:54

标签: asp.net-mvc-3

简而言之,我想通过创建一个静态类来简化我的一些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类的一部分。


注意: 我相信我有这样的工作,但对我的时间的要求让我朝另一个方向发展。我希望能够打开这个项目,看看我做了什么并在这里发布。请继续关注!

2 个答案:

答案 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;