我正在处理这个问题。
我使用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
?我正在阅读关于使用PartialView
,但我不喜欢这个想法,因为我不知道如何在POST Method
中绑定这些属性。
更新:
我不确定我是否必须修改prefixHtml来解决这个问题?
ViewData.TemplateInfo。
它呈现第二个模板因为如果我将
EditorFor
改为Editor
@Html。编辑器("abc",Contoso.Core.QuestionRepositoryManager.GetQuestionView(模型)
我认为这里的问题是编译器选择了错误的重载。如果您看一下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()
的返回类型是字符串也可以修复它。虽然我不确定为什么它与Editor一起工作,因为同样的问题会存在,因为构造函数非常类似。