ASP.NET MVC: перевод ViewModel в частичное представление на ViewPage - PullRequest
0 голосов
/ 01 октября 2010

У меня есть ViewPage, Index.aspx.В нем у меня есть:

<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, new PromoViewModel()); %>

Теперь для конструктора PromoViewModel требуется объект MemcachedCache, который также использует контроллер индекса.

Как мне передать это MemcachedCacheв мое частичное представление?

Должен ли я поместить экземпляр MemcachedCache в ViewData и сделать это?

<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx,
    new PromoViewModel(ViewData["cache"] as MemcachedCache)); %>

Index.aspx - не строго типизированное представление;он не использует модель представления.Но я должен строго напечатать его с моделью представления, имеющей открытый элемент Cache, а затем получить к нему доступ через Model?

<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, 
    new PromoViewModel(Model.Cache); %>

Теперь я узнаю с MVC3, есть третий вариант:Я могу установить элемент ViewModel в контроллере индекса с элементом Cache и использовать его следующим образом:

<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, 
    new PromoViewModel(ViewModel.Cache); %>

Что больше подходит?Это кажется немного смущающим / глупым для меня.

Ответы [ 2 ]

2 голосов
/ 01 октября 2010

Лично у меня есть это как часть моей модели, которая связана с представлением.И загрузить это свойство в контроллер ... Так что, я думаю, я говорю больше в соответствии с № 2 выше.За исключением того, что модель моего представления будет содержать экземпляр «PromoViewModel»:

public class MainViewModel {
    public string Prop1{get; set;}

    public PromoViewModel Promo {get; set; }
}

public class MainController {
    public ActionResult Hello() {
        // Retrieve "cache" or whatever
        var promoModel = new PromoViewModel(cache);

        return new MainViewModel {Prop1 = "Hello", Promo = promoModel };
    }
}

Мое обоснование состоит в том, что модель моего представления - это просто все, что мне нужно отобразить на моей странице.Мой контроллер отвечает за его сборку, различные службы, выполняющие большую часть работы, и т. Д ...

0 голосов
/ 01 октября 2010

Я бы предпочел ваш второй вариант для MVC2, и третий, если вы знаете, что будете использовать MVC3, когда приложение заработает (и уверены, что эта функция останется).

Перечисленные вами опции, в основном, представляют собой последовательность функций в версиях MVC.

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