簡體   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