在一个视图中显示多个模型的数据

时间:2012-01-17 12:25:19

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

在MVC 3中,我想显示来自两个模型的数据。学生和报名单一视图。 学生模型

public class Student
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int student_id { get; set; }

        public string student_name { get; set; }
        public string father { get; set; }
    }

注册模式

public class Enrollment
    {
        [Key]
        public int enrollment_id { get; set; }
        public string rollno { get; set; }
        public int student_id { get; set; }
        public string registration_no { get; set; }
        public date registration_date { get; set; }
}

我的ViewModel看起来像这样

 public class StudentEnrollmentViewModel
    {
        public Student_Info Student_Info { get; set; }
        public Enrollment_Info Enrollment_Info { get; set; }
        [Key]
        public int ID { get; set; }
}

如何从两个模型中检索数据并将其分配给viewmodel,以便我可以在视图中显示它?我正在使用Repository Design Pattern。

2 个答案:

答案 0 :(得分:0)

您可以使用DynamicPage,请参阅以下示例

我们需要使用动态视图页面。 (More Information) 请遵循以下步骤:

  1. 创建DynamicViewPage类型

    public class DynamicViewPage : ViewPage
    {
       public new dynamic Model { get; private set; }    
       protected override void SetViewData(ViewDataDictionary viewData)
        {
            base.SetViewData(viewData);
            Model =  ViewData.Model;
        }`
    }
    
  2. 您的控制器看起来像

    public ActionResult Account(string returnUrl)
    {
        LoginModel loginmodel = null;//Initialize Model;
        RegistrationModel registrationModel = null ;//Initialize Model;
       // Any Extra logic
        return View("Account", new
        {
            Login = loginmodel,
            Register = registrationModel
        });
    }
    
  3. 您的视图应该继承自

    Inherits="DynamicViewPage"
    
  4. 现在@Model.Login会给你Loginmodel

    @Model.Register会给你RegisterModel

    它应该按预期工作.........

答案 1 :(得分:0)

一般来说,控制器负责联系模型,存储在视图将使用的变量/数组/结构中返回的结果集。模型和视图组件/类将在控制器中注册。

一个例子:

<event-handler event="display.institutions" access="public">            
    <notify listener="userInstitutionRights" method="getInstitutionsWithDataRightsNOXML" resultKey="request.institutions" />

    <view-page name="userNav" contentKey="request.userNav"/>
    <view-page name="userInstitutions" contentKey="request.pageContent"/>

    <announce event="assemblePage" />
</event-handler>

事件display.institutions正在调用模型组件userInstitutionRights并将结果存储在resultKey request.institutions中,并且包含两个视图页面userNav,userInstitutions,其中resultKey可用于每个。