我正在处理这个问题。
我正在使用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”,但不是具体的输入{{ 1}})。
如何打印这两个EditorFor
?我正在阅读有关使用EditorFor
的内容,但我不喜欢这个想法,因为我不知道如何在PartialView
中绑定这些属性。
更新
我不确定是否需要修改prefixHtml才能修复此问题?
ViewData.TemplateInfo.HtmlFieldPrefix = ...
它呈现第二个模板,因为如果我更改为POST Method
而不是Editor
@ Html.Editor(“abc”,Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model))
答案 0 :(得分: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()
的返回类型是字符串也可以修复它。虽然我不确定它为什么适用于编辑器,因为那里存在同样的问题,因为构造函数非常类似。