【问题标题】:Show multiple models in a single view using ViewModel in Razor MVC3 (with only Details in view)在 Razor MVC3 中使用 ViewModel 在单个视图中显示多个模型(视图中只有详细信息)
【发布时间】:2013-01-24 08:09:29
【问题描述】:

我的任务是在一个视图中显示多个models。我已经为我的要求创建了一个ViewModel,但我没有满足我的要求。 请查看下面的代码并纠正我哪里出错了???

public partial class StudentsDetail
    {
        public int StudentID { get; set; }
        public int ParentID { get; set; }
        public string StudentName { get; set; }
        public string Gender { get; set; }
        public string FatherName { get; set; }
        public string MotherName { get; set; }
        public Nullable<System.DateTime> DateOfBirth { get; set; }

        public virtual ParentsDetail ParentsDetail { get; set; }
        public virtual SchoolDetail SchoolDetail { get; set; }
}

//模型2

 public partial class ParentsDetail
    {
        public ParentsDetail()
        {
            this.StudentsDetails = new HashSet<StudentsDetail>();
        }

        public int ParentID { get; set; }
        public string Occupation { get; set; }
        public string Organization { get; set; }
        public string AnnualIncome { get; set; }

        public virtual ICollection<StudentsDetail> StudentsDetails { get; set; }
    }

//我创建的ViewModel

 public class ParentsInformationViewModel
    {
        public List<StudentsDetail> StudentsDetails { get; set; }
        public List<ParentsDetail> ParentsDetails { get; set; }

        public ParentsInformationViewModel(List<StudentsDetail> _studentDetails, List<ParentsDetail> _parentsDetails) //Should i pass all the required parameters that i want to display in view ????
        {
            StudentsDetails = _studentDetails;
            ParentsDetails = _parentsDetails;

        }

//最后这是我在 StudentController 中定义的方法(我是否在正确的位置/方式定义了它??)

public ActionResult StudentViewModel()
        {
            ViewBag.ParentsDetail = new ParentsDetail(); //ParentsDetail is my controller
            List<StudentsDetail> studentListObj = StudentsDetailsDAL.GetStudentDetails();
            List<ParentsInformationViewModel> ParentInfoVMObj = new List<ParentsInformationViewModel>();
            //foreach (var student in studentListObj)
            //{
            //    ParentInfoVMObj.Add(new ParentsInformationViewModel(student.StudentID, student.ParentID));

            //}
            //ParentInfoVMObj.Add(ParentInfoVMObj); /// don't know how to call the required viewmodel
            return View(ParentInfoVMObj);
        }

我知道ViewModel 的上述方法是错误的,但如何使用它或我哪里出错了我无法理解。 我想在视图中显示ViewModel 作为详细视图。 请纠正我,因为我是 MVC3 的初学者。

提前致谢!!

【问题讨论】:

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


    【解决方案1】:

    在您的控制器中,如下定义您的操作方法。

    public ActionResult ParentsDetails()
    {
        var studentDetails = new List<StudentDetail>();
        var parentDetails = new List<ParentsDetail>();
    
        // Fill your lists here, and pass them to viewmodel constructor.
        var viewModel = new ParentsInformationViewModel(studentDetails, parentDetails)
    
        // Return your viewmodel to corresponding view.
        return View(viewModel);
    }
    

    在您的视图中定义您的模型。

    @model MySolution.ViewModels.ParentsInformationViewModel
    

    【讨论】:

    • 在同一个控制器中还是在ParentsDetail控制器中?
    • ParentsDetails 是一个奇怪的控制器名称。你确定不是父母?你的动作名称是 ParentsDetail ?它应该类似于默认 MVC 路由中的以下内容。 localhost:8080/controller/action
    • 好的。然后把这个方法放在那里。这完全取决于你。如果您想在用户请求 /ParentsDetails/ActionName 时查看此页面,请将其放在该控制器中。
    • 而mvc路由是localhost:8080/ParentsDetail/ParentsDetail。刚才我检查了视图,但我没有得到数据,因为我认为我没有通过所需的列表。我检查了你给定的代码,如 rounting 中所示......但纠正我。
    • 您是否正确填写列表?你能发布你的视图代码吗?
    【解决方案2】:

    在您的视图中是否声明您正在接收类型的模型

    在视图中:

    @model IEnumerable<ParentsInformationViewModel>
    

    【讨论】:

    • 不,只有我不知道如何以及在哪里放置什么??
    猜你喜欢
    • 2012-10-31
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多