ajax.beginform onsucess updatetargetid скрит вход

Опитвам се да извикам jquery ui диалогов прозорец, като прикача функцията към свойството onsuccess на ajaxoptions на ajax.beginform..

<script type="text/javascript">
    // Dialog
    $(document).ready(function () {
        $('#dialog').dialog({
            autoOpen: false,
            width: 600,
            modal: true,
            buttons: {
                "Ok": function () {
                    $(this).dialog("close");
                }
            }
        });
    });
</script> 

В отделен скрипт файл имам това..

function EmailResult() {
   $('#dialog').dialog('open');
}

След това имам формуляр за контакт, който всъщност все още не е свързан, контролерът просто отговаря с един от два отговора на низ.

<% using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "ContactResult",  OnSuccess="EmailResult" }))
{ %>

Ако извадя OnSuccess="EmailResult" от Ajax.BeginForm или просто премахна $('#dialog').dialog('open'); от моята функция EmailResult, грешката изчезва, така че очевидно това е проблем със свойството OnSuccess и диалоговия прозорец на Jquery UI.

Първият ми въпрос е правя ли нещо нередно, което кара това да не работи и/или ако това не работи, има ли по-добро решение.

Опитвам се да създам диалогов прозорец, който се появява и казва дали съобщението е изпратено. Не искам да използвам диалоговия прозорец за предупреждение.

Предполагам, че грешката ще помогне, в програмата за отстраняване на грешки на IE 8 излиза с недефинирана грешка в библиотеката MicrosoftAjax.js

Блокът finally на този код причинява проблема и под раздела locals в IE 8 пише, че b е недефинирано.

    this._onReadyStateChange = function () {
    if (a._xmlHttpRequest.readyState === 4) {
        try {
            if (typeof a._xmlHttpRequest.status === "undefined") return
        } catch (b) {
            return
        }
        a._clearTimer();
        a._responseAvailable = true;
        try {
            a._webRequest.completed(Sys.EventArgs.Empty)
        } finally {
            if (a._xmlHttpRequest != null) {
                a._xmlHttpRequest.onreadystatechange = Function.emptyMethod;
                a._xmlHttpRequest = null
            }
        }
    }
};

Това, което актуализираше, беше

<%= Html.Hidden("ContactResult") %>

Което се оказа, че е целият проблем, промених Hidden Input на div и той работи перфектно. Не знам защо, но... ако някой друг се сблъска с това, ето го...


person Casey    schedule 05.07.2010    source източник
comment
Освен това модалният диалог работи перфектно, когато го свържете към връзка, не работи в примера по-горе. Всъщност, ако го свържете към OnComplete вместо OnSucces, модалният диалогов прозорец ще се появи, но все още получавате същата грешка.   -  person Casey    schedule 05.07.2010


Отговори (1)


Така че предполагам, че това е, което разбрах... Започнах нов mvc проект с два входа и започнах просто да използвам поле за предупреждение, тъй като се оказа, че не е свързано с диалоговия плъгин jquery.ui. Накарах го да работи правилно с полето за предупреждение, което се появява след стартиране с помощта на ajax.beginform.

Накратко. Не можете да използвате скрит вход за UpdateTargetID в Ajax.BeginForm? Предполагам, че това е нещо като въпрос и отговор, но промяната на UpdateTargetID на ID на "div" го поправи и работи правилно. Можете дори да настроите видимостта на Div на скрита и тя работи.

person Casey    schedule 07.07.2010