通过ViewDataDictionary将数据传递给EditorFor不起作用

时间:2016-02-16 10:16:23

标签: c# asp.net-mvc asp.net-mvc-4 razor viewdata

我试图通过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);
}

抛出异常:

  

已添加具有相同键的项目。

1 个答案:

答案 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.ViewDataHtmlHelper.ViewContext.ViewData是相同的。

任何人都可以解释这种行为吗?