用于可编辑表行的MVC Ajax窗体

本文关键字:MVC Ajax 窗体 编辑 用于 | 更新日期: 2023-09-27 18:25:51

我有以下部分视图

@model Marks.Web.ViewModels.AssignmentMarkViewModel
<div class="table">
    @using (Ajax.BeginForm("_MarkInlineEditor", "Semesters", new AjaxOptions
    {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "editor" + Model.AssignmentId
    }, new { @id = "editor" + Model.AssignmentId, @class = "tr" }))
    {
        <span class="td">@Model.AssignmentName</span>
        <span class="td">@(Model.Mark.HasValue ? Model.Mark.Value.ToString("#.##") : "")</span>
        <span class="td">@Model.Weight.ToString("#.##")</span>
        <span class="td">@(Model.ActualMark.HasValue ? Model.ActualMark.Value.ToString("#.##") : "")</span>
        @Html.HiddenFor(model => model.AssignmentId)
        <span class="td"><button type="submit" name="option" value="edit">Edit</button></span>
        <span class="td"><button type="submit" name="option" value="clear">Clear</button></span>
    }
</div>

单击编辑按钮时,操作方法返回另一个部分视图,该视图用作编辑视图:

@model Marks.Web.ViewModels.AssignmentMarkViewModel
<div class="table">
    @using (Ajax.BeginForm("_MarkInlineViewer", "Semesters", new AjaxOptions
    {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "viewer" + Model.AssignmentId
    }, new { @id = "viewer" + Model.AssignmentId, @class = "tr" }))
    {
        <span class="td">@Html.TextBoxFor(m => m.AssignmentName)</span>
        <span class="td">@Html.TextBoxFor(m => m.Mark)</span>
        <span class="td">@Html.TextBoxFor(m => m.Weight, new { required="required", type="number" })</span>
        <span class="td">xx</span>
        @Html.HiddenFor(model => model.AssignmentId)
        <span class="td"><button type="submit" name="option" value="save">Save</button></span>
        <span class="td"><button type="submit" name="option" value="cancel">Cancel</button></span>
    }
</div>

当我单击Save按钮时,调用的操作方法应该是_MarkInlineViewer,但它调用的是_MarkInlineEditor。我这样做是不是有什么问题?以下是操作方法:

public PartialViewResult _MarkInlineEditor(string option, int assignmentId)
{
    var marksRepo = new MarksRepo();
    var mark = marksRepo.GetMarkById(assignmentId);
    var markVm = Mapper.Map<AssignmentMarkViewModel>(mark);
    return PartialView(option == "edit" ? "_MarkInlineEditor" : "_MarkInlineViewer", markVm);
}
public PartialViewResult _MarkInlineViewer(AssignmentMarkViewModel amvm)
{
    var marksRepo = new MarksRepo();
    var mark = Mapper.Map<AssignmentMark>(amvm);
    var updatedMark = marksRepo.UpdateMark(mark);
    var updatedAmvm = Mapper.Map<AssignmentMarkViewModel>(updatedMark);
    return PartialView("_MarkInlineViewer", updatedAmvm);
}

用于可编辑表行的MVC Ajax窗体

事实证明,我无法像在这里尝试的那样替换正在使用的表单,所以对于我的UpdateTargetId,我使用了父div而不是表单的ID。