我如何在同一模型的mvc中保存多行

时间:2014-08-12 15:12:46

标签: asp.net-mvc asp.net-mvc-4 razor

我有模型让我们称之为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插入我的数据库?!

2 个答案:

答案 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/以完成您正在尝试的功能。

谢谢。