我有以下部分视图
@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);
}
事实证明,我无法像在这里尝试的那样替换正在使用的表单,所以对于我的UpdateTargetId
,我使用了父div而不是表单的ID。