Дело в том, что в конструкторе я использую текущие viewdata «new ViewDataDictionary (this.ViewData)», который представляет собой viewdatadictionary, содержащий состояние модели, которое мне нужно для проверочных сообщений.
ли способ создатьViewDataDictionary
с моделью и дополнительными свойствами с одной строкой кода. Я пытаюсь сделатьRenderPartial
вызовите строго типизированное представление при сборке как модели, так и некоторых дополнительных свойств конфигурации дисплея без явной сборки ViewDataDictionary в несколько строк. Кажется, это было бы возможно, учитываяRenderPartial
перегрузка, принимая обе моделиobject
иViewDataDictionary
но похоже это просто игнорируетViewDataDictionary
всякий раз, когда они оба населены.
// FAIL: This will result in ViewData being a ViewDataDictionary
// where Model = MyModelObject and there are no other parameters available.
this.Html.RenderPartial("SomePartialView", MyModelObject, new ViewDataDictionary(new { SomeDisplayParameter = true }));
Я нашел кого-то еще ста же проблема, но их решение - та же многострочная концепция, которую я нашел: создать дискретнуюViewDataDictionary
с моделью, добавьте новый параметр (и) и используйте его вRenderPartial
вызов.
var SomeViewData = new ViewDataDictionary(MyModelObject);
SomeViewData.Add("SomeDisplayParameter", true);
this.Html.RenderPartial("SomePartialView", SomeViewData);
Я всегда могу обернуть эту логику вChainedAdd
метод, который возвращает дубликат словаря с добавленным новым элементом, но кажется, что мне не хватает способа созданияViewDataDictionary
это сделало бы это для меня (и это немного больше, чем я надеялся).
this.Html.RenderPartial("SomePartialView", new ViewDataDictionary(MyModelObject).ChainedAdd("SomeDisplayParameter", true));
public static ViewDataDictionaryExtensions {
public static ViewDataDictionary ChainedAdd(this ViewDataDictionary source, string key, object value) {
return source.ChainedAdd(new KeyValuePair<string,object>(key, value));
}
public static ViewDataDictionary ChainedAdd(this ViewDataDictionary source, KeyValuePair<string, object> keyAndValue) {
ViewDataDictionary NewDictionary = new ViewDataDictionary(source);
NewDictionary.Add(keyAndValue);
return NewDictionary;
}
}
Как хорошо, пытаясь собратьViewDataDictionary
с явнымModel
а такжеModelState
просто вызывает ошибку компиляции, потому что ModelState только для чтения.
// FAIL: Compilation error
this.Html.RenderPartial("SomePartialView", new ViewDataDictionary { Model = MyModelObject, ModelState = new ViewDataDictionary( new { SomeDisplayParameter = true }});
ОТВЕТ (S): Похоже, Крейг и я закончили тем, что нашли два отдельных синтаксиса, которые сделают работу. Я определенно предвзят в этом случае, но мне нравится идея сначала установить модель, а потом «украсить» ее.
new ViewDataDictionary(MyModelObject) { { "SomeDisplayParameter", true }, { "SomeOtherParameter", 3 }, { "SomeThirdParameter", "red" } };
new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
{ Model = MyModelObject };
Конечно, я бы все еще крутил свои колеса без его [в конечном итоге точечного] ответа, поэтому круг получает квадрат.