0

我试图通过将函数附加到 ajax.beginform 上 ajaxoptions 的 onsuccess 属性来调用 jquery ui 对话框。

<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 块导致了问题,在 IE 8 的 locals 选项卡下,它说 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") %>

原来是整个问题,我将隐藏输入更改为 div 并且它工作得很好。不知道为什么,但是......如果其他人遇到这个,你去......

4

1 回答 1

0

所以我想这就是我想出来的。我用两个输入开始了一个新的 mvc 项目,并开始使用一个警告框,因为事实证明它与 jquery.ui 对话框插件无关。我让它在使用 ajax.beginform 运行后出现的警报框正常工作。

长话短说……您不能在 Ajax.BeginForm 中为 UpdateTargetID 使用隐藏输入吗?我想这是一个问题和答案,但是将 UpdateTargetID 更改为“div”的 ID 可以修复它并且它可以正常工作。您甚至可以将 Div 可见性设置为隐藏并且它可以工作。

于 2010-07-07T03:40:02.183 回答