Html.EditorFor接口属性的方法

时间:2011-12-29 14:49:22

标签: asp.net-mvc-3 interface metadata html-helper mvc-editor-templates

我是初学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
{
  ...
}

PaperCreateInputThesisCreateInput类实现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;}

提前致谢。 抱歉我的英语不好。

0 个答案:

没有答案