2013-09-26 33 views
0

我有2个模型。在mvc中合并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得到它的值。

+0

你想要在视图中使用组合模型? –

+0

是的,以便我可以在视图中重新指定它。 – user952072

+1

您可以使用Neel Bhatt的建议。 –

回答

2

使下面的组合类,我不知道这是完美的或不..任何建议是可以接受的。

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

我也必须设置[Key] public int QuestionIdMap {get;组; }在你的例子中。但我怎么能在视图中呈现 – user952072

+0

只需绑定“QuestionAnswerViewModel”,如下所示: - – Neel

+0

@model MyProject.Web.ViewModels.QuestionAnswerViewModel – Neel

0

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

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