ajax.beginform onsuccess updatetargetid隐藏输入

时间:2010-07-05 18:36:44

标签: asp.net-mvc-2 ajax.beginform

我试图通过将函数附加到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" }))
{ %>

如果我从Ajax.BeginForm中取出OnSuccess="EmailResult"或者只是从我的EmailResult函数中删除$('#dialog').dialog('open');,则错误就会消失,所以这显然是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,它完美无缺。不知道为什么但是......如果有其他人遇到这个你去...

1 个答案:

答案 0 :(得分:0)

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

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