Сокращение от создания ViewDataDictionary и с моделью и с объектами ViewData?

Я близок к формализации решения. Интуицией сначала найдите максимальную мощность 2 < N, затем проверьте, является ли N - 2 ^ m четным или нечетным, решите, какую часть уровня отпуска нужно увеличить.

26
задан Community 23 May 2017 в 11:33
поделиться

2 ответа

Используйте объектный инициализатор и инициализаторы набора:

new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
    {
        Model = MyModelObject
    }

внутренний ViewDataDictionary инициализировал свой набор, тогда это заполняет "реальный" ViewDataDictionary с помощью перегрузки конструктора, которая берет ViewDataDictionary вместо объекта. Наконец, объектный инициализатор устанавливает модель.

Тогда просто передача все это без установки MyModelObject отдельно:

this.Html.RenderPartial("SomePartialView", null, 
    new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
        { Model = MyModelObject });
26
ответ дан Craig Stuntz 28 November 2019 в 07:25
поделиться

Используя ответ Craig как начальная точка - я даже не знал, что Вы могли объединить и вызов конструктора и объектный инициализатор - я наткнулся на этот отрывок из Палермо, который приводит к комбинации, которая работает. Он использует своего рода стенографию словаря, которая так или иначе заканчивает тем, что заполнила ModelState при потреблении ViewDataDictionary объектный инициализатор.

new ViewDataDictionary(MyModelObject) { { "SomeDisplayParameter", true }, { "SomeOtherParameter", 3 }, { "SomeThirdParameter", "red" } };
// Of course, this also works with typed ViewDataDictionary objects (what I ended up using)
new ViewDataDictionary<SomeType>(MyModelObject) { { "SomeDisplayParameter", true }, { "SomeOtherParameter", 3 }, { "SomeThirdParameter", "red" } };

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

12
ответ дан patridge 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: