首页 > 解决方案 > ASP.NET MVC 编辑单个列的所有行

问题描述

我有一张Employees有一堆列的表。我正在寻找一种方法来编辑其中一个列,以便它影响所有行。

Column 被调用accrualmonth,它用于 sql server 中的计算列。

.

理想情况下,我想提交一个表格,其中包含从 1 到 12 的数字下拉列表。

我创建了一个 CRUD 操作,因此我可以为各个行编辑它,但理想情况下我需要“批量”进行

 public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Employee employee = db.Employees.Find(id);
        if (employee == null)
        {
            return HttpNotFound();
        }
        ViewBag.AreaID = new SelectList(db.Areas, "AreaID", "Area1", employee.AreaID);
        ViewBag.DisciplineID = new SelectList(db.Disciplines, "DisciplineID", "Discipline1", employee.DisciplineID);
        ViewBag.HeadQuatersID = new SelectList(db.HeadQuaters, "HeadQuatersID", "Name", employee.HeadQuatersID);
        ViewBag.ShiftID = new SelectList(db.Shifts, "ShiftID", "Shift1", employee.ShiftID);
        ViewBag.SiteID = new SelectList(db.Sites, "SiteID", "SiteName", employee.SiteID);
        return View(employee);
    }

    // POST: Accruals/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "EmployeeID,FullName,Email,StartDate,ShiftID,AreaID,DisciplineID,SiteID,ALCategory,HoursTaken,HoursCarriedForward,Comments,SickLeaveTaken,SickLeaveEntitlementRemaining,StudyLeaveEntitlement,StudyLeaveTaken,StudyLeaveRemaining,ExamLeaveTaken,ForceMajeure,BereavementLeaveTaken,MaternityLeaveTaken,ParentalLeaveTaken,AdoptionLeaveTaken,ManagerEmail,AreaManagerEmail,SickLeaveEntitlement,ActiveStatus,HeadQuatersID,Apprentice,AwardedLeave,TotalHoursThisYear,EntitlementRemainingThisYear,LeaveDate,LeavingDatEntitlement,accrualmonth,AllowanceToEndofMonth,TotalHolsToAccru")] Employee employee)
    {
        if (ModelState.IsValid)
        {
            db.Entry(employee).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.AreaID = new SelectList(db.Areas, "AreaID", "Area1", employee.AreaID);
        ViewBag.DisciplineID = new SelectList(db.Disciplines, "DisciplineID", "Discipline1", employee.DisciplineID);
        ViewBag.HeadQuatersID = new SelectList(db.HeadQuaters, "HeadQuatersID", "Name", employee.HeadQuatersID);
        ViewBag.ShiftID = new SelectList(db.Shifts, "ShiftID", "Shift1", employee.ShiftID);
        ViewBag.SiteID = new SelectList(db.Sites, "SiteID", "SiteName", employee.SiteID);
        return View(employee);
    }

我该如何着手解决这个问题?我会尝试在编辑视图上使用 foreach 以便它可以循环浏览所有条目。

看法:

     model HolidayTracker.Models.Employee


 <h2>Edit</h2>

@using (Html.BeginForm())
 {
   @Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Employee</h4>
    <hr />


   @Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.EmployeeID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.FullName)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Email)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.StartDate)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ShiftID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AreaID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.DisciplineID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SiteID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ALCategory)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.HoursTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.HoursCarriedForward)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Comments)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SickLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SickLeaveEntitlementRemaining)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.StudyLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.StudyLeaveRemaining)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ExamLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ForceMajeure)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.BereavementLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.MaternityLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ParentalLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AdoptionLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ManagerEmail)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AreaManagerEmail)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SickLeaveEntitlement)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ActiveStatus)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.HeadQuatersID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Apprentice)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AwardedLeave)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.TotalHoursThisYear)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.EntitlementRemainingThisYear)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.LeaveDate)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.LeavingDatEntitlement)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AllowanceToEndofMonth)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.TotalHolsToAccru)

    <div class="form-group">
        @Html.LabelFor(model => model.accrualmonth, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("accrualmonth", new[] { new SelectListItem() { Text = "1", Value = "1" },
                                                     new SelectListItem() { Text = "2", Value = "2" },
                                                     new SelectListItem() { Text = "3", Value = "3" },
                                                     new SelectListItem() { Text = "4", Value = "4" },
                                                     new SelectListItem() { Text = "5", Value = "5" },
                                                     new SelectListItem() { Text = "6", Value = "6" },
                                                     new SelectListItem() { Text = "7", Value = "7" },
                                                     new SelectListItem() { Text = "8", Value = "8" },
                                                     new SelectListItem() { Text = "9", Value = "9" },
                                                     new SelectListItem() { Text = "10", Value = "10" },
                                                     new SelectListItem() { Text = "11", Value = "11" },
                                                     new SelectListItem() { Text = "12", Value = "12" } }, 


                                                     htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.accrualmonth, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</div>

}

按照要求:

在此处输入图像描述

标签: asp.net-mvc

解决方案


在您的视图中使用以下内容进行强类型定义,是的,请确保将所有控件替换为“For”

{ 
         List<SelectListItem> listOfMonths = new List<SelectListItem>();
        listOfMonths.Add(new SelectListItem() { Text = "1", Value = "1" });
        listOfMonths.Add(new SelectListItem() { Text = "2", Value = "2" });
        listOfMonths.Add(new SelectListItem() { Text = "3", Value = "3" });
        listOfMonths.Add(new SelectListItem() { Text = "4", Value = "4" });
        listOfMonths.Add(new SelectListItem() { Text = "5", Value = "5" });
        listOfMonths.Add(new SelectListItem() { Text = "6", Value = "6" });
        listOfMonths.Add(new SelectListItem() { Text = "7", Value = "7" });
        listOfMonths.Add(new SelectListItem() { Text = "8", Value = "8" });
        listOfMonths.Add(new SelectListItem() { Text = "9", Value = "9" });
        listOfMonths.Add(new SelectListItem() { Text = "10", Value = "10" });
        listOfMonths.Add(new SelectListItem() { Text = "11", Value = "11" });
        listOfMonths.Add(new SelectListItem() { Text = "12", Value = "12" });
    }
    @Html.DropDownListFor(model => model.accrualmonth, listOfMonths, htmlAttributes: new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.accrualmonth, "", new { @class = "text-danger" })

如果您按照下面的操作,您将获得所需的结果。

使用任何名称制作一个 partialView 并添加这样的代码。

    @model HolidayTracker.Models.Employee
      List<SelectListItem> listOfMonths= (List<SelectListItem>)ViewData["listOfMonths"];

    @using (Html.BeginCollectionItem("employees"))
    {


     @Html.HiddenFor(model => model.EmployeeID)


@Html.HiddenFor(model => model.FullName)


@Html.HiddenFor(model => model.Email)


@Html.HiddenFor(model => model.StartDate)


@Html.HiddenFor(model => model.ShiftID)


@Html.HiddenFor(model => model.AreaID)


@Html.HiddenFor(model => model.DisciplineID)


@Html.HiddenFor(model => model.SiteID)


@Html.HiddenFor(model => model.ALCategory)


@Html.HiddenFor(model => model.HoursTaken)


@Html.HiddenFor(model => model.HoursCarriedForward)


@Html.HiddenFor(model => model.Comments)


@Html.HiddenFor(model => model.SickLeaveTaken)


@Html.HiddenFor(model => model.SickLeaveEntitlementRemaining)


@Html.HiddenFor(model => model.StudyLeaveTaken)


@Html.HiddenFor(model => model.StudyLeaveRemaining)


@Html.HiddenFor(model => model.ExamLeaveTaken)


@Html.HiddenFor(model => model.ForceMajeure)


@Html.HiddenFor(model => model.BereavementLeaveTaken)


@Html.HiddenFor(model => model.MaternityLeaveTaken)


@Html.HiddenFor(model => model.ParentalLeaveTaken)


@Html.HiddenFor(model => model.AdoptionLeaveTaken)


@Html.HiddenFor(model => model.ManagerEmail)


@Html.HiddenFor(model => model.AreaManagerEmail)


@Html.HiddenFor(model => model.SickLeaveEntitlement)


@Html.HiddenFor(model => model.ActiveStatus)


@Html.HiddenFor(model => model.HeadQuatersID)


@Html.HiddenFor(model => model.Apprentice)


@Html.HiddenFor(model => model.AwardedLeave)


@Html.HiddenFor(model => model.TotalHoursThisYear)


@Html.HiddenFor(model => model.EntitlementRemainingThisYear)


@Html.HiddenFor(model => model.LeaveDate)


@Html.HiddenFor(model => model.LeavingDatEntitlement)


@Html.HiddenFor(model => model.AllowanceToEndofMonth)


@Html.HiddenFor(model => model.TotalHolsToAccru)

<div class="form-group">
    @Html.LabelFor(model => model.accrualmonth, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.accrualmonth, listOfMonths, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.accrualmonth, "", new { @class = "text-danger" })
    </div>
</div>
    }

然后使用上一页中添加此代码的部分视图,如果您说这是一个网格,您必须有不止一行

在主视图中

List<SelectListItem> listOfMonths = new List<SelectListItem>();
                    listOfMonths.Add(new SelectListItem() { Text = "1", Value = "1" });
                    listOfMonths.Add(new SelectListItem() { Text = "2", Value = "2" });
                    listOfMonths.Add(new SelectListItem() { Text = "3", Value = "3" });
                    listOfMonths.Add(new SelectListItem() { Text = "4", Value = "4" });
                    listOfMonths.Add(new SelectListItem() { Text = "5", Value = "5" });
                    listOfMonths.Add(new SelectListItem() { Text = "6", Value = "6" });
                    listOfMonths.Add(new SelectListItem() { Text = "7", Value = "7" });
                    listOfMonths.Add(new SelectListItem() { Text = "8", Value = "8" });
                    listOfMonths.Add(new SelectListItem() { Text = "9", Value = "9" });
                    listOfMonths.Add(new SelectListItem() { Text = "10", Value = "10" });
                    listOfMonths.Add(new SelectListItem() { Text = "11", Value = "11" });
                    listOfMonths.Add(new SelectListItem() { Text = "12", Value = "12" });

foreach (var module in Model?.Related)
                                            {

@{Html.RenderPartial("_YourPartialViewName", module, new ViewDataDictionary() { { "ListOfMonths", listOfMonths } });}

                                            }

控制器将收到这样的信息。

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(   List<Employee > employees)

如果 preopery 名称相同,则无需包含绑定,您将通过此获得它


推荐阅读