我试图通过ViewDataDictionary
将数据传递到HtmlHelper<TModel>
的扩展方法中的模板文件
var vdd = new ViewDataDictionary(helper.ViewData);
vdd["someValue"] = true;
return helper.EditorFor(expression, "_MyTemplate", vdd);
在我的_MyTemplate.cshtml
我尝试访问它
@{
var myViewDataValue = ViewData["someValue"];
}
总是null
作为我的&#34; someValue&#34;位于ViewData.Values
下,我无法通过它的名称访问它。
我在这里缺少什么?
直接在我的视图中使用
ViewData["someValue"] = true;
@Html.EditorFor(m => m.Start, "_MyTemplate")
正在运作。扩展方法中的内容失败,因为_MyTemplate
ViewData
没有&#34; someValue&#34;一点都不。
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 :(得分: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
是相同的。
任何人都可以解释这种行为吗?