0

我正在处理这个问题。

我正在使用EditorFor一个抽象类的模型。

@model Contoso.Core.Base.Question

@Html.HiddenFor(model => Model.Id)
@Html.Hidden("ModelType", Model.GetType().AssemblyQualifiedName)

@Html.EditorFor(model => Model, Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model))

如上所示,稍后为模型调用一个具体的编辑器,而 MVC 只渲染第一个(我的意思是,打印隐藏的输入字段“Id 和 ModelType”,而不是具体的输入EditorFor)。

我该怎么做才能打印这两个EditorFor?我正在阅读有关 using的内容PartialView,但我不喜欢这个想法,因为我不知道如何将这些属性绑定到POST Method.

更新:

  1. 我不确定是否必须修改 prefixHtml 来解决这个问题?

    ViewData.TemplateInfo.HtmlFieldPrefix = ...

  2. 它呈现第二个模板,因为如果我改为Editor而不是EditorFor

    @Html.Editor("abc", Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model))

4

1 回答 1

1

我相信这里的问题是编译器选择了错误的重载。如果您查看 EditorFor 的重载,您会看到有两个采用两个参数:

public static MvcHtmlString EditorFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
Object additionalViewData
)

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName
)

你可以试试这个:

@Html.EditorFor(model => Model, 
     Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model) as string)

或者你可以这样做:

 @Html.EditorFor(model => Model, 
     Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model), null)

还有两个构造函数接受 3 个参数,但其中任何一个,第二个参数始终是模板名称,因此通过传递 null 选择哪个实际上并不重要。

问题也可能是GetQuestionView()返回一个对象而不是字符串,这就是为什么它选择了错误的构造函数,确保返回类型GetQuestionView()是字符串也可以修复它。虽然我不确定为什么它可以与编辑器一起使用,但由于构造函数非常相似,因此也会存在同样的问题。

于 2013-05-04T02:12:04.110 回答