Я близок к формализации решения. Интуицией сначала найдите максимальную мощность 2 < N, затем проверьте, является ли N - 2 ^ m четным или нечетным, решите, какую часть уровня отпуска нужно увеличить.
Используйте объектный инициализатор и инициализаторы набора:
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 });
Используя ответ 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
явно в инициализаторе, но это, действительно кажется, поддерживает и исходный объект модели и "добавленные" параметры для представления. Существует определенно много других перестановок этого синтаксиса, которые не работают - Вы не можете объединить модель со словарем в отдельном объекте или использовать синтаксис объектного инициализатора для значений словаря - но вышеупомянутая версия, кажется, работает.