EditorFor忽略TemplateInfo.FieldPrefix

时间:2016-02-24 10:58:33

标签: asp.net asp.net-mvc razor asp.net-mvc-5

我正在使用HtmlEditor.EditorFor()来显示扩展编辑。

使用

设置HtmlEditor的HtmlFieldPrefix之后
[
  {
    "text": "Subject1",
    "children": [
      {
        "id": 1,
        "text": "sub1"
      }
    ]
  },
  {
    "text": "Subject2",
    "children": [
      {
        "id": 16,
        "text": "sub2"
      }
    ]
  },
  {
    "text": "Subject3",
    "children": [
      {
        "id": 22,
        "text": "sub3"
      }
    ]
  }
]

我打电话

htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix = "MySpecialFieldPrefix";

在视图中,HtmlFieldPrefix为空,这会破坏我对模型的绑定。我希望它是htmlHelper.EditorFor(Expression)

"MySpecialFieldPrefix"

有人可以告诉我为什么它是空的吗?编辑器使用哪个HtmlHelper?

更新

似乎与htmlHelper的处理似乎不同(I)预期。

我不使用视图的HtmlHelper,而是创建一个新的(因为我必须更改模型)。 HtmlHelper.EditorFor似乎使用View的HtmlHelper而不是我创建的HtmlHelper(为什么会这样做?)。

当我为Views-HtmlHelper设置HtmlFieldPrefix时,前缀是正确的。

1 个答案:

答案 0 :(得分:0)

您应该在ViewBag或ViewData中传递htmlHelper,然后将其强制转换为变量并在视图中使用@ htmlHelper.xxx而不是@ Html.xxx

在致电您的观点之前:

@{
    htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix = "MySpecialFieldPrefix";
    ViewBag.HtmlHelper = htmlHelper;
}

在您看来:

@{
    HtmlHelper htmlHelper = (HtmlHelper)ViewBag.HtmlHelper;
}

@htmlHelper.EditorFor(m => m.Field)