我有模型让我们称之为staffmodel 它具有Id -Name -ordernum属性 和mvc razor我用html创建表来显示所有员工,在表的末尾让我说我有2个按钮 添加按钮并保存按钮 对于每次点击添加它应该创建允许我添加新员工数据的新行 并保存以保存新条目 这里的技巧我想添加超过1行,然后通过1次点击保存所有 员工模特
public class staffmodel
{ [DisplayName("الكود ")]
public int? staffID { get; set; }
[Required]
[DisplayName("الأسم ")]
public string staffName { get; set; }
[Required]
public int departmentID { get; set; }
[DisplayName("الترتيب ")]
public int? staffOrder { get; set; }
}
staffcontroler
[HttpGet]
[ActionName("Create")]
public ActionResult Create_get()
{
departmentBL department = new departmentBL();
ViewBag.DepartmentId = new SelectList(department.getDepartments(), "departmentID", "departmentName");
return View();
}
[HttpPost]
[ActionName("Create")]
public ActionResult Create_post(int DepartmentId)
{
staffmodel staff = new staffmodel();
TryUpdateModel(staff);
staff.departmentID = DepartmentId;
if (ModelState.IsValid)
{
staffBL staffcreator = new staffBL();
staffcreator.addStaff(staff);
return RedirectToAction("Index");
}
return View();
}
剃刀代码
@model Overtime.Models.staffmodel
<div class="row">
<div class="col-xs-12">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.DropDownList("DepartmentId", (IEnumerable<SelectListItem>)ViewBag.DepartmentId,"أختار القسم", new { @class = "dropdownList col-xs-5 col-xs-pull-3", })
@*@Html.DropDownList("DepartmentId", (SelectList)ViewBag.DepartmentId)*@
<table class="gridtbl">
<tr>
<th>
@Html.LabelFor(model => model.staffName)
</th>
<th>
@Html.LabelFor(model => model.staffOrder)
</th>
<th>
</th>
</tr>
<tr class="tblrow">
<td>
@Html.TextBoxFor(model => model.staffName, new { @class = "form-control",autocomplete="off" })
@Html.ValidationMessageFor(model => model.staffName)
</td>
<td>
@Html.TextBoxFor(model => model.staffOrder, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.staffOrder)
</td>
<td>
<i class="fa fa-times eleremove faa-wrench animated-hover animated-hover"></i>
</td>
</tr>
</table> <i class="fa fa-plus-square add"></i>
<br />
<p>
<input type="submit" value="أضافة" class="btn btn-primary btn-lg" />
</p>
}
<div class="pull-left back">
@Html.ActionLink("العودة الى الرئيسية", "Index")
<i class="fa fa-arrow-circle-o-left"></i>
</div>
</div>
</div>
最后是jquery代码
$(document).ready(function () {
$("form").on("click", ".add", function () {
var row = ($(".tblrow").html());
$(".gridtbl").append("<tr class=tblrow>" + row + "</tr>")
});
$(".gridtbl").on("click", ".eleremove", function () {
if ($(".gridtbl tr").length > 2)
$(this).parent().parent().remove();
else {
alert("لا يمكن حذف هذا الصف. صف واحد على الأقل ")
}
});
});
我如何遍历所有行并将em插入我的数据库?!
答案 0 :(得分:1)
您可以使用ICollection<staffmodel>
在控制器中接收它,然后您可以使用foreach
进行保存。
在您的视图中,您需要按如下方式创建输入:
<tr>
<td>
<input name="[0].staffmodel.staffName" />
</td>
<td>
<input name="[0].staffmodel.departmentID" />
</td>
</tr>
<tr>
<td>
<input name="[1].staffmodel.staffName" />
</td>
<td>
<input name="[1].staffmodel.departmentID" />
</td>
</tr>
<tr>
<td>
<input name="[2].staffmodel.staffName" />
</td>
<td>
<input name="[2].staffmodel.departmentID" />
</td>
</tr>
您使用jquery
执行此操作,请注意输入,始终应从0开始。
答案 1 :(得分:0)
合并上面的javascript会降低代码的可读性和复杂性。 我建议你为你的行创建一个局部视图。 该局部视图将使用视图模型,该模型将包含行中的所有元素以及验证。
单击“添加”按钮,然后创建一个ajax帖子并将此局部视图附加到表的末尾。
要保存这些行,请确保编写自定义模型绑定器。
请参阅此http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/以完成您正在尝试的功能。
谢谢。