MVC3: вернуть объект просмотра из класса, не являющегося контроллером - PullRequest
2 голосов
/ 04 октября 2011

Короче говоря, я хотел бы упростить некоторые из моих страниц 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);
    }
}

Как правильно вернуть объект View (...) из класса, не являющегося контроллером?Вышеприведенное не скомпилируется, так как View (...) является частью класса Controller.


ПРИМЕЧАНИЕ. Я считаю, что что-то вроде этого работает, но требования к моему времени отправили меня в другом направлении.,Я надеюсь, что смогу снова открыть этот проект, чтобы посмотреть, что я сделал, и опубликовать его здесь.Оставайтесь с нами!

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Проще говоря, правильный путь - не делать это в статическом классе. (ИМО, конечно). Особенно, если вы получаете «данные из хранилища данных» - это не должно быть статичным.

По моему мнению, создайте защищенный метод в базовом контроллере или используйте дочерние действия и выполните их рендеринг, используя Html.Action.

0 голосов
/ 04 октября 2011

Просто создайте экземпляр, хотя я не думаю, что рекомендую это.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...