Форма JQuery UI модальная форма кэширования старых значений в приложении AJAX

У меня сильная головная боль, использующая форму в модальном диалоге с пользовательским интерфейсом 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, который живет на главной странице и загружается асинхронно с содержимым.

Ответ 1

Из того, что я мог бы интерпретировать из вашего кода, вы фактически не удаляете предыдущие формы. Вы просто удаляете из них диалог.

Метод описывается как:

Удалить функциональность диалога полностью. Это вернет элемент возвращается в исходное состояние.

Значит, он все еще там.

Попробуйте это (обратите внимание на $ ('#divForm').remove();):

 $.post('/Item/Save', postData, function (response, status) {
            $('#divForm').remove();
            $('#divContent').html(response); //response mark up contains a new 'divForm' element
        }, 'html');
    }

Ответ 2

С моим решением я использую

Диалог

('destroy') вместо диалога ( "закрыть" )