ребята, после долгих отладок я узнал, что в моем приложении, содержащем частичное представление с несколькими флажками и кнопкой отправки, контроллер / JS вызывается дважды.Вот поворот:
- , когда JS вызывается дважды.В первом запросе он сохраняет правильные значения флажков, затем в следующем запросе сохраняет предыдущие доступные значения.
- Этот вызов не происходит последовательно, он происходит случайным образом. Также проверяется на наличие проблем с данными или кодом, нопроблема не возникает. Так что проблема генерируется самим вызовом AJAX, но я не могу найти причину.
Может кто-нибудь помочь мне разобраться в этом. Я действительно в отчаянии.мой код выглядит следующим образом:
Мой частичный просмотр:
using (Ajax.BeginForm("action", "controller", new AjaxOptions { OnComplete = "TimeLineObject.OnAjaxComplete", OnSuccess = "", OnBegin = "TimeLineObject.OnAjaxBegin", UpdateTargetId = "divEditorContent", OnFailure = "insertfailure" }, new { @class = "form-inline", id = "searchForm" }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m =>m.IsSave)
<table class="table table-responsive">
<tr>
<th>#</th>
<th>Document </th>
<th>Input Type</th>
</tr>
@for (int i = 0; i < Model.model.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(m => Model.model[i].Id)
@Html.HiddenFor(m => Model.model[i].Id)
@Html.CheckBoxFor(m => Model.model[i].IsChecked, new { @class = "form-control" })
</td>
<td>
@Model.model[i].DocumentName
</td>
<td>
@Model.model[i].InputType
</td>
</tr>
}
</table>
}
Мой контроллер:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
[ValidateInput(true), ValidateAntiForgeryToken]
public ActionResult action(object documents)
{
using (CaseConfigManager manager = new CaseConfigManager())
{
var response = manager.layer2(documents.data, SessionId);
if (response.Status)
{
return this.PartialView("_Message", new MessageModel() { Type = MessageType.Success, Message = response.Message, Code = ClientStatussCode.TimeLine });
}
else
{
return this.PartialView("_Message", new MessageModel() { Type = MessageType.Warning, Message = response.Message, Code = ClientStatussCode.TimeLine });
}
}
}
Теперь кнопка сохранения находится на странице временной шкалы, на которой создаются частичные представления.
TimeLine JS:
OnAjaxBegin: function () {
debugger;
$('#formsave').attr('disabled', true);
},
OnAjaxComplete: function () {
debugger;
$('#formsave').attr('disabled', false);
RegisterAutoCompute();
RegisterValidation();
TimeLineObject.RegisterDatePicker();
},
OnAjaxSuccess: function (HTML, Message) {
TimeLineObject.FillHtmlContent(HTML);
TimeLineObject.OnCloseClick();
TimeLineObject.Message(Message);
},
OnAjaxFailure: function (error) {
TimeLineObject.Message(TimeLineObject.Alerts.AjaxFail);
},
Это выше OnAjaxBegin вызывается дважды.