我是初学ASP.NET MVC 3网站开发人员并遇到此问题:
有几个视图模型,它们具有相似的逻辑,我想到有一个共同的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)
假设我有某种实现此接口的模型,例如:
public class FirstModelInput : IExistOrCreateNewInput
{
[Display(Name="First")]
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("PaperCreateInput")]
public PaperCreateInput paperCreateInput {get; set;}
public IUnapprovedNewEntityCreateInput createInput
{
get
{
return paperCreateInput;
}
set { }
}
}
public class SecondModelInput : IExistOrCreateNewInput
{
[Display(Name="Second")]
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("ThesisCreateInput")]
public ThesisCreateInput thesisCreateInput {get; set;}
public IUnapprovedNewEntityCreateInput createInput
{
get
{
return thesisCreateInput;
}
set { }
}
}
public class ThirdModelInput : IExistOrCreateNewInput
{
...
}
PaperCreateInput
和ThesisCreateInput
类实现IUnapprovedNewEntityCreateInput
接口。
所以,我想要我的视图模型
public class SomeGlobalViewModel
{
[Required]
string name {get; set;}
[UIHint("ExistOrCreateNewInput")]
FirstModelInput firstModel {get; set;}
}
使用Html.EditorFor(o => 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;}
提前致谢。 抱歉我的英语不好。