Дело в том, что в конструкторе я использую текущие 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 };

Конечно, я бы все еще крутил свои колеса без его [в конечном итоге точечного] ответа, поэтому круг получает квадрат.

Ответы на вопрос(5)

Ваш ответ на вопрос