EditorFor () может принимать объект additionalViewData
, типичный метод заполнения которого выглядит примерно так:
EditorFor (model => model.PropertyName, new {myKey = "myValue"})
Как я могу проверить содержимое дополнительныхViewData, добавить или добавить к существующим значение для ключа и т. д. в пользовательском помощнике HTML?
Я пробовал следующие подходы:
Dictionary ()
и добавить / добавить значения: не работает так, как будто реализация EditorFor в MVC использует новый RouteValueDictionary (additionalViewData)который встраивает словарь в словарь new RouteValueDictionary (additionalViewData)
, но с такой же (или очень похожей) проблемой, как указано выше Я также открыт для «вы делаю это неправильно »- может быть, мне не хватает более простого подхода. Имейте в виду, что я пытаюсь написать помощник HTML, который можно использовать повторно и который добавляет некоторые значения в additionalViewData, которые будут использоваться настраиваемыми представлениями. Некоторые значения зависят от метаданных из свойства, поэтому это не так просто, как просто использовать кучу разных шаблонов.
Обновите пример того, что я делаю:
public static MvcHtmlString myNullableBooleanFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> choice, string templateName, object additionalViewData)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(choice, htmlHelper.ViewData);
/*
here need to add to additionalViewData some key values among them:
{ propertyName, metadata.PropertyName }
*/
StringBuilder sb = new StringBuilder();
sb.AppendLine(htmlHelper.EditorFor(choice, templateName, additionalViewData).ToString());
MvcHtmlString validation = htmlHelper.ValidationMessageFor(choice);
if (validation != null)
sb.AppendLine(validation.ToString());
return new MvcHtmlString(sb.ToString());
}
Обновите, что происходит, когда я конвертирую анонимный объект в Dictionary
и передайте этот словарь в EditorFor ()
:
Я поставил точку останова в представлении Razor и изучил ViewData. Похоже, что словарь, переданный в EditorFor ()
, помещается в другой Dictionary
. В «Непосредственном окне» ViewData выглядит так:
ViewData.Keys
Count = 4
[0]: "Comparer"
[1]: "Count"
[2]: "Keys"
[3]: "Values"
Видите, как в словаре содержится содержимое словаря? Да, фактические данные находятся во внутреннем словаре, однако неудивительно, что это не работает.
Добавлена награда.