两次使用相同的模型类型编辑器



我正在处理这个问题。

我使用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中绑定这些属性。

更新:

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

    ViewData.TemplateInfo。

  2. 它呈现第二个模板因为如果我将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一起工作,因为同样的问题会存在,因为构造函数非常类似。

最新更新