C# MVC表单值未重置

C# MVC表单值未重置,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个问题,当返回新的ActionResult时,表单中的隐藏值没有更新 例如,用户将检查多个记录并单击更新完成按钮。这使得Ajax调用UpdateCompleted操作,该操作为选中的记录设置日期,Ajax调用返回表单后提交。在表单提交操作方法中执行某些逻辑后,将返回一个更新的模型,该模型中的所有记录的IsChecked值都设置为false,但由于下面生成的id具有相同的值,因此表单将保留以前的checked值 代码 <td> @Html.CheckBox

我有一个问题,当返回新的ActionResult时,表单中的隐藏值没有更新

例如,用户将检查多个记录并单击更新完成按钮。这使得Ajax调用UpdateCompleted操作,该操作为选中的记录设置日期,Ajax调用返回表单后提交。在表单提交操作方法中执行某些逻辑后,将返回一个更新的模型,该模型中的所有记录的IsChecked值都设置为false,但由于下面生成的id具有相同的值,因此表单将保留以前的checked值

代码

    <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>
@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();
            }
        });
    });
});

@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)
呈现的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>

提交代码

    <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>
@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();
            }
        });
    });
});
@使用(@Html.BeginForm(“Index”,“WorkOrderMaster”,FormMethod.Post,new{id=“workOrderMasterForm”}))
{
$(函数(){
$(“#提交完成”)。单击(函数(){
$.ajax({
键入:“POST”,
url:$(this).data('submit-url'),
数据:$('#workOrderMasterForm')。序列化(),
成功:功能(数据){
$(#workOrderMasterForm')。提交();
}
});
});
});
我希望使用模型中的新值,但这不会发生

在这种情况下,是否建议手动对输入值进行编码,以避免出现以下格式

类名\索引\属性名称


提前感谢您花时间研究这个问题。

根据提供的代码,您正在执行对服务器的AJAX调用,但希望在操作完成后清除这些值

因为您没有刷新页面,所以它将不起作用。要在不刷新页面的情况下清理表单值,您需要在代码中做一些小更改:

$(function () {
    $('#submitCompletion').click(function () {
        $.ajax({
            type: 'POST',
            url: $(this).data('submit-url'),
            data: $('#workOrderMasterForm').serialize(),
            success: function (data) {
                $('#workOrderMasterForm').reset();
            }
        });
    });
});

更改发生在成功承诺中,其中“$('#workOrderMasterForm').sugmit();”更改为“$('#workOrderMasterForm').reset();”.

为了继续进行此操作。我将表单移动到部分视图,并添加了一个div以将部分视图加载到其中。每当通过许多筛选器或提交检查记录的用户在页面上触发事件时,该div都会被清除并重新加载。这解决了我的问题。

抱歉,原始代码示例不完全清楚。存在一个正在调用两个差异操作。一个是为每个选中的记录设置日期完成值,然后提交表单以更新表单。我更新了上面的代码以反映发生的情况。您没有显示POST方法,但我只能假设您已重置值并返回视图,而不是重定向(
HtmlHelper
方法使用从发布的值中添加的值表单
ModelState
)-更改属性值不会影响
ModelState
)。为什么对
IsChecked
有两个输入?隐藏的输入将被忽略,并且没有意义