【问题标题】:Display data from multiple models in one view在一个视图中显示来自多个模型的数据
【发布时间】:2012-01-17 12:25:19
【问题描述】:

在 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; }
}

如何从两个模型中检索数据并将其分配给视图模型,以便我可以在视图中显示它?我正在使用存储库设计模式。

【问题讨论】:

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


【解决方案1】:

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

一个例子:

<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 可供每个页面使用。

【讨论】:

    【解决方案2】:

    你可以使用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"
      

    现在@Model.Login 会给你Loginmodel

    @Model.Register 会给你RegisterModel

    它应该可以按您的预期工作............

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多