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