2016-02-16 6 views
1

Я пытаюсь передать данные через ViewDataDictionary в шаблон-файла в качестве добавочного метода HtmlHelper<TModel>Передача данных в EditorFor через ViewDataDictionary не работает

var vdd = new ViewDataDictionary(helper.ViewData); 
vdd["someValue"] = true; 

return helper.EditorFor(expression, "_MyTemplate", vdd); 

В моей _MyTemplate.cshtml я пытаюсь получить доступ к этому

@{ 
    var myViewDataValue = ViewData["someValue"]; 
} 

который всегда null как мой «someValue» находится под ViewData.Values, где я не могу получить к нему доступ через его имя.

Что мне здесь не хватает?

Использование непосредственно на мой взгляд

ViewData["someValue"] = true; 
@Html.EditorFor(m => m.Start, "_MyTemplate") 

работает. То же самое внутри метода расширения не работает в _MyTemplate, ViewData не имеет «someValue» вообще.

public static MvcHtmlString MyExtension<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
{ 
    helper.ViewData["someValue"] = true; 
    return helper.EditorFor(expression, "_MyTemplate", helper.ViewData); 
} 

бросает исключение:

уже был добавлен Элемент с тем же ключом.

+0

Когда вы передаете его так: 'helper.EditorFor (выражение,« _MyTemplate », vdd);' вы в основном передаете модель вашему шаблону, вы пробовали '@model ViewDataDictionary' в начале вашего шаблона, а затем используйте' var myViewDataValue = Model; '? –

+0

Это какой-то расширенный шаблон для объекта DateTime. Поэтому изменение модели в «ViewDataDictionary» кажется неправильным (даже если оно будет работать). Любая идея, почему она не существует при установке ее как 'helper.ViewData [" someValue "] = true;', но не передавая ее как параметр для 'helper.EditorFor (выражение," _MyTemplate ")'? – KingKerosin

ответ

0

Изменение

public static MvcHtmlString MyExtension<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
{ 
    helper.ViewData["someValue"] = true; 
    return helper.EditorFor(expression, "_MyTemplate"); 
} 

в

public static MvcHtmlString MyExtension<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
{ 
    helper.ViewContext.ViewData["someValue"] = true; 
    return helper.EditorFor(expression, "_MyTemplate"); 
} 

Я думал HtmlHelper.ViewData и HtmlHelper.ViewContext.ViewData такие же, если не переопределяется так или иначе.

Может ли кто-нибудь объяснить это поведение?

+0

Вы когда-нибудь находили ответ на вопрос, зачем вам это нужно? – TruthOf42