[英]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.