Asp.net mvc 5 部分视图数据未粘贴到模型时出错
你好。我真的不知道该修哪一部分。 这是视图模型Asp.net mvc 5 部分视图数据未粘贴到模型时出错,asp.net-mvc-5,Asp.net Mvc 5,你好。我真的不知道该修哪一部分。 这是视图模型 public class EmployeeViewModel { public int ID { get; set; } public string LastName { get; set; } public string FirstName { get; set; } public virtual ICollection<FacultySchedViewModel> FacultySchedul
public class EmployeeViewModel
{
public int ID { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public virtual ICollection<FacultySchedViewModel> FacultyScheduleViewModels { get; set; }
}
public class FacultySchedViewModel
{
public int ID { get; set; }
public int EmployeeID { get; set; }
public string Schedule { get; set; }
public string Room { get; set; }
}
在主视图中,javascript可以在部分视图中动态创建文本框
<script>
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for (var i = 0; i < colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
switch (newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select":
newcell.childNodes[0].selectedIndex = 0;
clear_attrib();
break;
}
}
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for (var i = 0; i < rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if (null != chkbox && true == chkbox.checked) {
if (rowCount <= 1) {
alert("Cannot delete all the rows.");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
} catch (e) {
alert(e);
}
}
函数addRow(tableID){
var table=document.getElementById(tableID);
var rowCount=table.rows.length;
var row=table.insertRow(rowCount);
var colCount=table.rows[0].cells.length;
对于(变量i=0;imodel.Schedule,new{htmlAttributes=new{@class=“form control”}})
@Html.ValidationMessageFor(model=>model.Schedule,“,new{@class=“text danger”})
@EditorFor(model=>model.Room,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Room,“,new{@class=“text danger”})
@EditorFor(model=>model.Subject,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Subject,“,new{@class=“text danger”})
}
和控制器
public ActionResult Create()
{
EmployeeViewModel employeeViewModel = new EmployeeViewModel();
ICollection<FacultySchedViewModel> schedViewModel = new List<FacultySchedViewModel>();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(EmployeeViewModel employeeViewModel, ICollection<FacultySchedViewModel> schedViewModel)
{
if (ModelState.IsValid)
{
var emp = db.Employee.Create();
emp.ID = employeeViewModel.ID;
emp.LastName = employeeViewModel.LastName;
emp.FirstName = employeeViewModel.FirstName;
db.Employee.Add(emp);
if (schedViewModel != null)
{
var sched = db.FacultySchedule.Create();
foreach (var aaa in schedViewModel)
{
sched.EmployeeID = employeeViewModel.ID;
sched.Schedule = aaa.Schedule;
sched.Room = aaa.Room;
sched.Subject = aaa.Subject;
}
}
db.SaveChanges();
return RedirectToAction("Index");
}
public ActionResult Create()
{
EmployeeViewModel EmployeeViewModel=新的EmployeeViewModel();
ICollection schedViewModel=新列表();
返回视图();
}
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果创建(EmployeeViewModel EmployeeViewModel、ICollection schedViewModel)
{
if(ModelState.IsValid)
{
var emp=db.Employee.Create();
emp.ID=employeeViewModel.ID;
emp.LastName=employeeViewModel.LastName;
emp.FirstName=employeeViewModel.FirstName;
db.Employee.Add(环境管理计划);
if(schedViewModel!=null)
{
var sched=db.FacultySchedule.Create();
foreach(schedViewModel中的var aaa)
{
sched.EmployeeID=employeeViewModel.ID;
附表=aaa附表;
附表房间=aaa房间;
附表主体=aaa主体;
}
}
db.SaveChanges();
返回操作(“索引”);
}
运行创建并单击保存按钮后,
EmployeeViewModel EmployeeViewModel
有效且不为空,但ICollection schedViewModel
为null。我尝试仅使用EmployeeViewModel EmployeeViewModel
但不知道如何保存。我以这种方式保存模型,因为存在重新设置默认值和要从其他表中提取的值。这里没有太多意义。EmployeeViewModel
包含FacultySchedViewModel
集合的属性,那么为什么POST方法要为schedViewModel
添加一个额外的参数呢方法初始化一些对象,但您从不使用它们或将它们传递给视图。您的BeginCollectionItem()
方法在所有控件的前面加上“FacultySchedViewModel”但是你没有任何属性,叫做“代码> FulultSydVIEW模型< /COD>。我最好是想创建一个新的<代码>雇员<代码>,并且能够动态地添加<代码> FulultStays< /Cord>对象吗?是的,想要创建一个新的雇员,并且能够动态地添加FululTy时间表,我真的很困惑。我已经尝试过其他的PAR代码。tial view..有两种方法可供选择。如果在分部中使用BeginCollectionItem
,则“添加”按钮应调用一个方法,返回分部并将其添加到DOM中(注意-删除周围的
元素-您不希望每行都有一个表)。另一种方法是克隆html模板,更新索引器并将其附加到DOM。我建议在您的情况下使用第一种方法,尽管这意味着每次添加行时都要调用服务器。
<table class="table" id="AddSchedule">
@using (Html.BeginCollectionItem("FacultySchedViewModel"))
{
<tr>
<td><input type="checkbox" name="chk[]" class="checkbox_style" /></td>
<td>
@Html.HiddenFor(model => model.ID, new { htmlAttributes = new { @class = "form-control" } })
</td>
<td>
@Html.EditorFor(model => model.Schedule, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Schedule, "", new { @class = "text-danger" })
</td>
<td>
@Html.EditorFor(model => model.Room, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Room, "", new { @class = "text-danger" })
</td>
<td>
@Html.EditorFor(model => model.Subject, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Subject, "", new { @class = "text-danger" })
</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-12">
<input type="button" name="add" value="Add" class="btn btn-default" onclick="addRow('AddSchedule')">
<input type="button" name="remove" value="Remove" class="btn btn-default" onclick="deleteRow('AddSchedule')">
</div>
</div>
public ActionResult Create()
{
EmployeeViewModel employeeViewModel = new EmployeeViewModel();
ICollection<FacultySchedViewModel> schedViewModel = new List<FacultySchedViewModel>();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(EmployeeViewModel employeeViewModel, ICollection<FacultySchedViewModel> schedViewModel)
{
if (ModelState.IsValid)
{
var emp = db.Employee.Create();
emp.ID = employeeViewModel.ID;
emp.LastName = employeeViewModel.LastName;
emp.FirstName = employeeViewModel.FirstName;
db.Employee.Add(emp);
if (schedViewModel != null)
{
var sched = db.FacultySchedule.Create();
foreach (var aaa in schedViewModel)
{
sched.EmployeeID = employeeViewModel.ID;
sched.Schedule = aaa.Schedule;
sched.Room = aaa.Room;
sched.Subject = aaa.Subject;
}
}
db.SaveChanges();
return RedirectToAction("Index");
}