Asp.net mvc 具有相同模型类型的EditorFor两次

Asp.net mvc 具有相同模型类型的EditorFor两次,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,mvc-editor-templates,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.Ge

我正在处理这个问题

我正在使用
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
中的输入)

如何打印这两个
编辑器for
?我正在阅读关于使用
PartialView
,但我不喜欢这个想法,因为我不知道如何在
POST方法中绑定这些属性

更新:

  • 我不确定是否需要修改前缀来解决这个问题

    ViewData.TemplateInfo.HtmlFieldPrefix=

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

    @编辑器(“abc”,Contoso.Core.QuestionRepositoryManager.GetQuestionView(模型))


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

    public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    Object additionalViewData
    )
    
    或者你可以这样做:

     @Html.EditorFor(model => Model, 
         Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model), null)
    
    还有两个构造函数接受3个参数,但无论哪一个,第二个参数始终是模板名称,因此通过传递null,选择哪一个并不重要


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

    什么是“GetQuestionView()”,它返回什么?你确定它在做你认为它在做的事情吗?它是一个为具体模型返回模板名的函数。是的,正确返回值字符串没有更多信息,我们几乎无能为力。你需要提供你的编辑器模板(它在EditorTemplates文件夹中,对吗?),你需要提供模型…好的,给我几分钟时间added@MystereMan我意识到了一件事,如果我在第二个中替换:EditorFor to Editor,它会工作<代码>@Html.Editor(“abc”,Contoso.Core.QuestionRepositoryManager.GetQuestionView(模型))
    @Html.EditorFor(model => Model, 
         Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model) as string)
    
     @Html.EditorFor(model => Model, 
         Contoso.Core.QuestionRepositoryManager.GetQuestionView(Model), null)