Предоставить пользовательский объект для каждого представления - PullRequest
1 голос
/ 22 августа 2009

Как я могу предоставить пользовательский объект для каждого представления в ASP.NET MVC, не создавая ViewModel для абсолютно каждого представления, которое у меня есть?

При использовании членства в ASP.NET я просто получаю переменную Profile в представлениях с информацией о профиле, но при развертывании собственного я не вижу способа экспортировать эту информацию.

Ответы [ 3 ]

2 голосов
/ 22 августа 2009

Унаследуйте ваши контроллеры от базового контроллера. В базовом контроллере переопределите OnActionExecuting и установите ViewData["UserObject"] здесь. Примерно так:

public class YourBaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewData["UserObject"] = ...
    }
}

Или создайте пользовательский фильтр с тем же методом OnActionExecuting, если вы хотите, чтобы только определенные контроллеры предоставляли объект пользователя для просмотра.

ОБНОВЛЕНИЕ:

Создайте собственный помощник Html, если вы не хотите разыгрывать ViewData["UserObject"] каждый раз:

public static object RenderUserObject(this HtmlHelper html)
{
    return ((html.ViewData["UserObject"] as UserObject) ?? new UserObject()).ToString();
}
0 голосов
/ 22 августа 2009

Одной из альтернатив наличию базового ViewModel класса и, следовательно, необходимости определения класса ViewModel для каждого представления, является создание универсального ViewModel<T> класса, который предоставляет свойство T InnerModel или что-то подобное. Тогда вы можете передать ViewModel<Foo> вместо того, чтобы явно создавать FooViewModel класс.

Конечно, если вам также нужно больше специальных ViewModels на местах, вы можете оставить базовый класс ViewModel, и у вас будет ViewModel<T>, а ваши ViewModels на заказ расширят его.

0 голосов
/ 22 августа 2009

Наследуйте свои ViewModel классы от мастера ViewModel со свойством User.

Кроме того, вы можете передать объект в коллекцию ViewData и использовать метод расширения, чтобы упростить доступ к объекту в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...