EditorFor使用相同的模型类型两次

时间:2013-05-04 00:25:56

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 mvc-editor-templates

我正在处理这个问题。

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

更新

  1. 我不确定是否需要修改prefixHtml才能修复此问题?

    ViewData.TemplateInfo.HtmlFieldPrefix = ...

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

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

1 个答案:

答案 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()的返回类型是字符串也可以修复它。虽然我不确定它为什么适用于编辑器,因为那里存在同样的问题,因为构造函数非常类似。