加入两个模型以将数据导入视图

时间:2014-02-14 07:04:42

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

完成MVC Noob警告。(2小时学习时间)

我在线查看了很多MVC3示例,但我没有找到一个简单的例子来做我想做的事情。

我想要做的是两个连接两个模型并将一些数据放入视图中。最明显的

  public partial class Model1
    {
        public int ID { get; set; }
        public int StudentID { get; set; }
        public int CoachID { get; set; }
        public String StudentName {get;set;}

}



public partial class Model2
    {
        public int CoachID { get; set; }
        public String CoachName { get; set; }
}

基本上在我看来,我必须在CoachID上加入模型1和模型2并打印 网格中的StudentName和CoachName。

  
      
  1. 我该怎么做?如何为此创建视图模型?

  2.   
  3. 如何遍历视图并打印已连接的数据?

  4.   
  5. 我可以改为在数据库中创建一个视图并直接将模型和视图附加到该视图中吗?

  6.   

听起来很简单,但我在网上花了最后三个小时才完全陷入困境

3 个答案:

答案 0 :(得分:3)

  1. 创建一个StudentCoachViewModel,其中包含您需要显示的属性,仅此而已。

  2. 在控制器中填充此viewmodel的列表并将其发送到您的视图。代码示例即将推出。

  3. 在您的视图中枚举该列表

  4. 
    public class StudentCoachViewModel
    {
       public string CoachName { get; set; }
       public string StudentName { get;set; }
    }
    

    在你的控制器中,沿着以下几行(只是输入它,没有检入编译器)

    public ActionResult Index()
    {
    
      //code to populate your model1 and model2 already assumed
    
      var viewModels = (from m in model1List
                     join r in model2List on m.CoachId equals r.CoachId 
                     select new StudentCoachViewModel(){ StudentName=m.StudentName, 
                              CoachName = r.CoachName }).ToList();
    
      return View(viewModels);
    }
    

    在你看来,有些东西(显然你想要格式化并使用可以由visual studio自动生成的适当布局,表格等)

    @model IEnumerable<StudentCoachViewModel>
    //other html content here
    
    @foreach(var viewModel in Model)
    {
       @Html.DisplayFor(o=>o.CoachName)   @Html.DisplayFor(o=>o.StudentName)
    }
    

    现在,如果你只想在这里找一个而不是列表,那就更容易了

    public ActionResult Index(int id)
    {
      //code to load model1 and model2 already assumed to be in place. also assuming you loaded this data from a database by the id field being passed into this method.
      return View(new StudentCoachViewModel(){ StudentName = model1.StudentName, CoachName = model2.CoachName});
    }
    

    然后视图变得简单

    @model StudentCoachViewModel
    //other html here, h1, divs, etc whatever is in your view as html content.
    @Html.EditorForModel()
    or if you like to display each one instead of the above one line call:
    @Html.LabelFor(o=>o.CoachName)
    @Html.EditorFor(o=>o.CoachName)
    

答案 1 :(得分:1)

试试这个

public partial class Model3{
   public Model1 model1{get;set;}
   public Model2 model2{get;set;}
}

Model3绑定到视图中。

答案 2 :(得分:0)

查看页面只能接受一个模型,因此您无法同时传递两个模型, 因此,您必须使用该两个模型的所有成员创建另一个模型... 然后在控制器中,您应该将这两个模型转换为一个模型,并在新模型1的帮助下将其传递给视图

或者您可以使用这两个模型

创建另一个新模型