如何使用一个视图编辑具有公共基类的2个不同类?

时间:2012-02-21 21:06:44

标签: c# asp.net-mvc-3 razor

好吧,我需要制作两张几乎相等的问卷。不同之处在于,一个人的问题比另一个人更多。所以我创建了一个只有ID(持久性)的类作为两者的基类:

public class BaseQuizzClass{
    public int ID {get;set;}
} 

然后我创建了类,变量的名称几乎相同(我认为它可以帮助使用剃刀):

public class Quizz1 : BaseQuizzClass{

   [Display(Name="QuestionHere")]
   public string q1 {get;set;}

   [Display(Name="QuestionHere")]
   public string q2 {get;set;}

   ...

   [Display(Name="QuestionHere")]
   public string q9 {get;set;}
}

public class Quizz2 : BaseQuizzClass{
   [Display(Name="QuestionHere")]
   public string q1 {get;set;}

   [Display(Name="QuestionHere")]
   public string q2 {get;set;}

   ...

   [Display(Name="QuestionHere")]
   public string q9 {get;set;}

   [Display(Name="QuestionHere")]
   public string q10 {get;set;}
}

然后我使用BaseQuizzClass作为模型创建了一个View,因此我可以将子类作为参数传递给它。但我不知道如何访问childs类属性。

OBS:每个问题都有自己的文字,在显示标注中定义。

有什么办法可以做我想要的吗? (我不确定我是否清楚)

2 个答案:

答案 0 :(得分:2)

我可能会稍微改变模型:

public class QuestionClass
{
  public String Question { get; set; }

  public String Answer { get; set; }
}

public class QuizzClass
{
  public Int32 ID { get; set; }

  [UIHint("Question")]
  public IList<QuestionClass> Questions { get; set; }
}

然后为问题创建一个视图,而不是使用对象的“键/值”设置[DisplayAttribute]

// ~/Views/_controller_/_action_.cshtml
@model QuizzClass

@using (Html.BeginForm())
{
  for (var q = 0; q < Model.Questions.Length; q++)
  {
    // ~/Views/Shared/EditorTemplates/Question.cshtml
    @Html.EditorFor(x => Model.Questions[q]);
  }
}

只是看起来过度杀戮才有这么多相似之处,但明确地在你的“不同”对象中调出每个问题。

答案 1 :(得分:0)

我认为你的架构有问题。为什么不只是有一个集合的课程来解决你的问题呢?