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)