【发布时间】:2016-12-26 20:12:24
【问题描述】:
我正在制作一个 MVC 应用程序。我正在创建一个使用 ViewModel 的视图,并在控制器传递的此视图中使用数据库实体。
控制器:
public ActionResult AddGroup(AddGroupViewModel model)
{
ClassDeclarationsDBEntities1 entities=new ClassDeclarationsDBEntities1();
return View(entities.Subjects.ToList());
}
视图模型:
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; }
}
}
我该如何解决?
【问题讨论】:
-
在
AddGroupViewModel上创建List<ClassDeclarationsThsesis.Classes.Subject>类型的属性?或者创建一个具有这两种类型属性的视图模型并使用它?您只能使用一种类型,但您可以根据需要自定义该类型。 -
@David 是的,但是我如何从数据库中获取传递的数据(在控制器中传递)?
-
来自您已经拥有并已用于获取数据的
entities对象... -
@David 请查看编辑
-
这听起来像是一个单独的问题。实体框架是否抛出该异常?我一直认为 Entity Framework 类需要无参数的构造函数才能让框架使用它们,尽管我可能会误会。
标签: c# .net asp.net-mvc model-view-controller