Только в IE, когда всплывающее окно открывается во второй раз, метод контроллера не вызывается для перезагрузки данных для всплывающего окна.
Я обновляю данные через всплывающее окно.
Данные обновляются, и затем при повторном открытии всплывающего окна текстовое поле по-прежнему имеет то же значение, которое было до обновления.
Я открываю всплывающее окно, нажимая на кнопку, определенную как следующее в ItemDetail.cshtml
@Html.ActionLink("Create New Item", "OpenNewItem", "ItemDetail", new
{
itemId = Model.Item.ItemId
}, new { @class = "modal-link k-button k-primary", onclick = "$('#UserID_validationMessage').css('display', 'none');$('#newAmount_validationMessage').css('display', 'none')" })
ItemDetail
контроллер имеет метод, который вызывается при нажатии OpenNewItem
:
public ActionResult OpenNewItem(int ItemId)
{
var model = new ItemDetailViewModel();
SetUpViewData();
if (itemId > 0)
{
var item= ItemModel.GetItemByID(itemId);
model.NewTicket = item;
model.Item = item;
}
model.NewTicket.TicketAction = "New";
return PartialView("_NewTicketModal", model);
}
_NewTicketModal
частичное представление имеет следующее определение:
@using (Ajax.BeginForm("Create", "ItemDetail",
new AjaxOptions
{
HttpMethod = "POST",
LoadingElementId = "loader",
UpdateTargetId = "newTicket",
InsertionMode = InsertionMode.Replace,
OnComplete = "onRequestComplete",
OnFailure = "CheckError"
}, new { id = "CreateItemForm" }))
{
<div class="modal-body">
<div id="newTicket">
@Html.Partial("_CreateNewItem", Model)
</div>
</div>
}
Загружает _CreateNewTicket
частичное представление, которое представляет всплывающее окно. Это всплывающее окно имеет Create
кнопка. При нажатии данные обновляются с учетом количества нового элемента.
Когда запрос ajax завершен, onRequestComplete
определяется в _CreateNewTicket
view вызывается для обработки всего остального: отображение подтверждения и очистка данных в модальном всплывающем окне:
<script>
function onRequestComplete() {
var message = '@Model.NewItem.Message';
$("#dialog").kendoDialog({
width: "400px",
title: "System Message",
closable: true,
modal: true,
content: "<div style='text-align: center'>" + message + "</div>",
actions: [
{
text: 'OK',
action: function (e) {
onClose();
},
primary: true
}
]
}).data("kendoDialog").open();
}
function onClose() {
if ($('.modal #NewItem_ItemId').length > 0) {
var ticketId = $('.modal #NewItem_ItemId').val();
var success = $('.modal #NewItem_Success').val();
if (success == 'True') {
$('.modal-content').html('');
$('#modal-container').modal('hide');
window.location.href = "/NewItemDetail/Index/" + itemId;
}
}
}
</script>
Все работает нормально Chrome
а также Firefox
Однако в IE
при открытии всплывающего окна во второй раз, метод контроллера не вызывается, и данные, отображаемые во всплывающем окне, являются старыми данными, даже если данные были обновлены.
Я просмотрел некоторые ответы, и одним из решений было очистить данные из окна модели. Тем не менее, я делаю это в моем onClose()
метод.
Что мне здесь не хватает?