繁体   English   中英

MVC中的多个模型

[英]mvc multiple models in view

我正在制作MVC应用程序。 我正在创建一个使用ViewModel的视图,并且还在该控制器通过的视图中使用数据库实体。
控制器:

public ActionResult AddGroup(AddGroupViewModel model)
        {
            ClassDeclarationsDBEntities1 entities=new ClassDeclarationsDBEntities1();
            return View(entities.Subjects.ToList());
        }

ViewModel:

public class AddGroupViewModel
{
    [Required]
    [Display(Name = "Subject")]
    public string subject_name { get; set; }

    [Required]
    [Display(Name = "Number of Groups")]
    public int qty { get; set; }
}

最后是我的观点:

@model List<ClassDeclarationsThsesis.Classes.Subject>
@model ClassDeclarationsThsesis.Models.AddGroupViewModel 

@{
    ViewBag.Title = "Add Groups";
}

<h2>Add Groups to subjects</h2>

@using (Html.BeginForm("AddGroup", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Create new groups.</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @{
            List<SelectListItem> listItems1 = new List<SelectListItem>();

        }
        @foreach (var subject in Model)
        {
            listItems1.Add(new SelectListItem
            {
                Text = subject.name,
                Value = subject.name,
                Selected = true
            });
        }
        @Html.LabelFor(m => m.subject_name, new {@class = "col-md-2 control-label"})
        <div class="col-md-10">
            @Html.DropDownListFor(m => m.subject_name, listItems1, new {@class = "form-control"})
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.qty, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.qty, new { @class = "form-control" })
        </div>
    </div>


    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-default" value="Submit" />
        </div>
    </div>
}

如您所见,我正在尝试使用两个模型。 但是给出了一个例外(以及如何区分它们)。 如何在视图中结合这两个模型?
编辑:
所以我做了答案中建议的事情,但是现在我得到了这样的例外:

{"The class 'ClassDeclarationsThsesis.Models.Subject' has no parameterless constructor."}

该类如下所示:

namespace ClassDeclarationsThsesis.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Subject
    {
        private int v;
        private int userid;

        public Subject(int v, int userid, string name)
        {
            this.class_id = v;
            this.user_id = userid;
            this.name = name;
        }


        public int class_id { get; set; }
        public int user_id { get; set; }
        public string name { get; set; }

        public virtual Group Group { get; set; }
        public virtual Subjects_Users Subjects_Users { get; set; }
        public virtual Task Task { get; set; }
    }
}

我该如何解决?

由于您已经有一个视图模型,因此我将使用它:

@model ClassDeclarationsThsesis.Models.AddGroupViewModel

只需为您也要使用的集合的视图模型添加一个属性:

public class AddGroupViewModel
{
    [Required]
    [Display(Name = "Subject")]
    public string subject_name { get; set; }

    [Required]
    [Display(Name = "Number of Groups")]
    public int qty { get; set; }

    public List<Subject> Subjects { get; set; }
}

然后只需从您的控制器中创建一个实例,以发送到视图:

var entities = new ClassDeclarationsDBEntities1();
var model = new AddGroupViewModel();
model.Subjects = entities.Subjects.ToList();
// set your other properties too?
return View(model);

然后,在视图中,仅在需要该集合时引用Model上的属性,而不是模型本身即可:

@foreach (var subject in Model.Subjects)

基本上,虽然您只能对模型使用一种类型(因为框架中的视图只有一个Model属性可用),但是该类型可以是您喜欢的任何类型,甚至是您定义的自定义视图模型类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM