Asp.net mvc 3 Html.EditorFor接口属性的方法

Asp.net mvc 3 Html.EditorFor接口属性的方法,asp.net-mvc-3,interface,metadata,html-helper,mvc-editor-templates,Asp.net Mvc 3,Interface,Metadata,Html Helper,Mvc Editor Templates,我是一名初级ASP.NET MVC 3 web开发人员,有以下问题: 有几个视图模型,它们具有相似的逻辑,我想到了一个通用的EditorTemplate,用于Html.EditorFor呈现它们 该模板名为ExistOrCreateNewInput.cshtml,并使用IExistOrCreateNewInput接口类强类型: public interface IExistOrCreateNewInput { int? existEntId { get; set; } IUnapprov

我是一名初级ASP.NET MVC 3 web开发人员,有以下问题:

有几个视图模型,它们具有相似的逻辑,我想到了一个通用的EditorTemplate,用于Html.EditorFor呈现它们

该模板名为ExistOrCreateNewInput.cshtml,并使用IExistOrCreateNewInput接口类强类型:

public interface IExistOrCreateNewInput
{
  int? existEntId { get; set; }
  IUnapprovedNewEntityCreateInput createInput { get; set; }
}
模板的内容类似于:

@model IExistOrCreateNewInput

<h2>Add or choose</h2>
@* here put some common js code *@
Html.EditorFor(o => o.existEntId)
Html.EditorFor(o => o.createInput)
其中PaperCreateInput和IsCreateInput类实现IUnapprovedNewEntityCreateInput接口。 所以,我想要我的视图模型

public class SomeGlobalViewModel
{
  [Required]
  string name {get; set;}
  [UIHint("ExistOrCreateNewInput")]
  FirstModelInput firstModel {get; set;}
}
使用Html.EditorForo=>o.firstModel方法正确呈现属性firstModel。 现在我知道EditorFor方法正在处理元数据,所以我的问题可能是如何将属性的元数据传递给基本接口属性。如果我错了,请纠正我。 无论如何,我需要那些助手方法

Html.EditorFor(o => o.existEntId)
Html.EditorFor(o => o.createInput)
在我的编辑器模板中,强类型接口用于呈现我在实现类中声明的模型属性:

[UIHint("Lookup")]
public int? existEntId {get; set;}  
[UIHint("PaperCreateInput")]
public PaperCreateInput createInput {get; set;}
提前谢谢。
很抱歉我的英语不好。

我想知道你的代码一开始是如何编译的,因为FirstModelInput,SecondModelInput。。。类不实现IExistOrCreateNewInput接口。在此接口中,createInput属性的类型为IUnapprovedNewEntityCreateInput,而不是PaperCreateInput或IsCreateInput。很抱歉,我的示例中遗漏了该部分。查看上面的固定类。谢谢。您的视图需要基于具体实现的强类型,接口不起作用。关于如何实现一个editorTemplate想法,有什么见解吗?因为这里放一些常见的js代码部分有很多代码,我不想复制粘贴到所有视图中。基本上,所有这些FirstModelInput和SecondModelInput都有相同的逻辑,只需要以相同的方式呈现它们。您可以在编辑器模板*.cshtml中使用@model dynamic,并将@Html.EditorFor{lambda exp}替换为@Html.EditorFirstModelInput,因为表达式树不能包含动态操作。
[UIHint("Lookup")]
public int? existEntId {get; set;}  
[UIHint("PaperCreateInput")]
public PaperCreateInput createInput {get; set;}