我遇到一个问题,即当返回新的ActionResult时,表单中的隐藏值不会更新。
例如,用户将检查多个记录,然后单击“更新完成”按钮。这使得Ajax调用UpdateCompleted操作,为已检查的记录设置日期,一旦Ajax调用返回,表单就会被提交。在表单提交Action方法中执行某些逻辑后,将返回更新的模型,并且对于模型中的所有记录,IsChecked值设置为false,但由于下面生成的id具有相同的值,表单将保留先前检查的值。
代码
<td>
@Html.CheckBoxFor(model => Model.WorkOrderDetails[x].IsChecked)
@Html.HiddenFor(modelItem => Model.WorkOrderDetails[x].IsChecked)
@Html.HiddenFor(modelItem => Model.WorkOrderDetails[x].WorkOrderEntityId)
@Html.HiddenFor(model => model.WorkOrderDetails[x].WorkOrderId)
</td>
呈现HTML
<td>
<input data-val="true" data-val-required="The IsChecked field is required." id="WorkOrderDetails_0__IsChecked" name="WorkOrderDetails[0].IsChecked" type="checkbox" value="true"><input name="WorkOrderDetails[0].IsChecked" type="hidden" value="false">
<input id="WorkOrderDetails_0__IsChecked" name="WorkOrderDetails[0].IsChecked" type="hidden" value="False">
<input id="WorkOrderDetails_0__WorkOrderEntityId" name="WorkOrderDetails[0].WorkOrderEntityId" type="hidden" value="ODU=">
<input id="WorkOrderDetails_0__WorkOrderId" name="WorkOrderDetails[0].WorkOrderId" type="hidden" value="NjQ4OTU3">
</td>
提交代码
@using(@Html.BeginForm("Index", "WorkOrderMaster", FormMethod.Post, new { id = "workOrderMasterForm" }))
{
<div>
<div class="project-buttons">
<div class="btn-group">
<input id="submitCompletion" class="btn btn-success" value="Update Completion" data-submit-url='@Url.Action("UpdateCompleted", "WorkOrderMaster")' />
</div>
</div>
$(function () {
$('#submitCompletion').click(function () {
$.ajax({
type: 'POST',
url: $(this).data('submit-url'),
data: $('#workOrderMasterForm').serialize(),
success: function (data) {
$('#workOrderMasterForm').submit();
}
});
});
});
我希望能够使用模型中的新值,但这种情况并没有发生。
是否建议在这种情况下手动编码输入值以避免以下格式?
ClassName_Index_PropertyName
提前感谢您查看此问题的时间。
答案 0 :(得分:1)
根据提供的代码,您正在对服务器执行AJAX调用,但希望在操作完成后清除值。
由于您没有刷新页面,因此无效。要在不刷新页面的情况下清理表单值,您需要对代码进行一些小改动:
$(function () {
$('#submitCompletion').click(function () {
$.ajax({
type: 'POST',
url: $(this).data('submit-url'),
data: $('#workOrderMasterForm').serialize(),
success: function (data) {
$('#workOrderMasterForm').reset();
}
});
});
});
改变是成功的承诺,其中&#34; $(&#39;#workOrderMasterForm&#39;)。sugmit();&#34;改为&#34; $(&#39;#workOrderMasterForm&#39;)。reset();&#34;。
答案 1 :(得分:0)
努力继续前进。我将表单移动到局部视图,并添加了一个div来加载局部视图。无论何时通过许多过滤器或提交已检查记录的用户在页面上触发事件,都会清除并重新加载div。这解决了我的问题。