У меня сильная головная боль, использующая форму в модальном диалоге с пользовательским интерфейсом JQuery. Диалог отображается, когда пользователь нажимает на ссылку. При первом открытии формы он отлично работает; форма отправляется на сервер, содержащая страница обновляется через AJAX, и диалог закрывается. Однако последующие попытки использовать форму - вот где проблемы начинаются.
Во второй попытке его использования форма представляется со значениями из предыдущего представления, несмотря на обновление содержимого страницы. Это происходит, даже если я перейду к другому экрану приложения и вернусь. Содержимое страницы, которая повторно отображается после каждого представления, включает форму, которая составляет диалог, поэтому "старые" значения, которые отправляются, больше не существуют в разметке страницы. Их каким-то образом "запоминают" пользовательский интерфейс JQuery. Я не знаю, как обойти это поведение, и это сводит меня с ума.
Как я могу заставить диалоговое окно JQuery забыть о предыдущих представлениях формы при обновлении контента?
Я использую JQuery UI 1.7.2 с JQuery 1.3.2, и приложение построено в ASP.NET MVC 3 (хотя я не верю, что на сервере есть какая-либо проблема). Я бы предпочел не обновлять версию JQuery, которую я использую.
Соответствующий JavaScript:
//shows dialog containing form; triggered by clicking a hyperlink
function showForm() {
$('#divForm').dialog({
modal: true,
draggable: false,
resizable: false,
title: summary,
width: 400
});
}
//submits the form; triggered by clicking 'Save' button from the dialog
function save() {
var postData = $('#frmAddNew').serialize();
$.post('/Item/Save', postData, function (response, status) {
$('#divForm').dialog('destroy');
$('#divContent').html(response); //response mark up contains a new 'divForm' element
}, 'html');
}
}
Вот разметка формы и содержащая div. Это то, что перезагружается на страницу после отправки (PartialViewResult) с новыми значениями для txtDate, txtTime и hdnId. Это входы, которые сохраняют старые значения.
<div id="divForm" class="admPanel hidden">
<form id="frmAddNew" action="/Item/Save" method="post">
<input id="hdnId" name="UserId" type="hidden" value="3">
<div>
<label for="txtDate">Admin Date:</label>
<input id="txtDate" name="AdministrationDateTime" type="text" value="8 Jun 2011">
<br>
<label for="txtTime">Admin Time:</label>
<input id="txtTime" name="AdministrationDateTime.Time" type="text" value="21:45">
<br>
<label>Outcome:</label>
<input id="txtOutcome" name="AdministrationOutcome" type="text" value="">
<br>
</div>
</form>
<p>
<input class="buttonNormal" id="btnSave" onclick="save();" type="button" value="Save">
</p>
divContent - это пустой div, который живет на главной странице и загружается асинхронно с содержимым.