在mvc中结合2个相关模型

时间:2013-09-26 05:45:58

标签: asp.net-mvc asp.net-mvc-4 razor

我有2个这样的模特。

 public partial class Question
    {
        public int QuestionId { get; set; }        
        public string QuestionText { get; set; }
        public string Ans1 { get; set; }
        public string Ans2 { get; set; }
        public string Ans3 { get; set; }
        public string Ans4 { get; set; }
    } 
    public partial class UserAnswer
    {
        public int UserAnsId { get; set; }
        public Nullable<int> QuestionId { get; set; }
        public Nullable<int> UserId { get; set; }
        public Nullable<int> AnsVal { get; set; }        
    }

正如您所看到的,QuestionId在两个模型中。如何在视图中呈现它。有很多问题。问题Moldel在初始运行时有数据,但UserAnswer没有。

如何组合这两个模型,以便我可以在视图中将其用作IEnumerable。 Ans1,Ans2,Ans3,Ans4有文本,UserAnswer中的AnsVal将从Raiobutton获取其值。

2 个答案:

答案 0 :(得分:2)

制作如下所示的组合课程。我不确定这是否完美。任何建议都是可以接受的。

public class QuestionAnswerViewModel 
{ 
    public Question Question {get;set;}
    public ICollection<UserAnswer> Answers {get;set;}
}

答案 1 :(得分:0)

您想要创建一个表示组合模型对象的ViewModel。这样可以保持清洁,模型就是这样,模型,传递给视图的内容可以是模型,但在很多情况下,ViewModel的概念将使设计更容易,同时保持代码松散耦合和清洁。这也保留了对View不重要的东西,即模型中的特定属性,例如CreatedDate可能不会传递给View,特别是因为View请求会将值传回null,因为它不是在视图中使用,因此不会在回发中填充。这可能导致您使用CreatedDate的空值更新数据库,因为它未在视图中使用。

也许你的解决方案中有一个Model类库?如果这样做,请创建另一个名为MyNamespace.Web.ViewModels的类库或类似的类库。此外,您应该考虑使用像AutoMapper这样的工具,它将ViewModel上的View请求填充到Controller,并在View回发上填充模型到控制器。