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

本文关键字:EditorFor 不起作用 ViewDataDictionary 数据 通过 | 更新日期: 2023-09-27 18:34:51

我正在尝试通过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因为我的"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);
}

引发异常:

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

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

更改

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如果不以某种方式被覆盖,也是相同的。

谁能解释这种行为?