0

我有一个 Jquery UI 对话框,在填写表格后弹出确认项目的创建。由于表单的各种需求,我在更新面板中有表单,特别是因为我希望在不重新加载页面的情况下对表单进行验证。

JavaScript 似乎不会在异步回发时重新加载。这意味着当表单成功并且我将变量“formSubmitPass”更改为 true 时,它​​不会通过 <%= formSubmitPass %> 传递给 Javascript。如果我在提交按钮上添加一个触发器来进行完整的回发,它就可以工作。但是,我不希望提交按钮像我所说的那样进行完整的回发,这样我就可以在更新面板中验证表单。

我怎样才能让我的表单异步验证,但是当表单成功完成并将项目保存到数据库时,我的 JavaScript 将正确重新加载?

Javascript:

    var formSubmitPass = '<%= formSubmitPass %>';
var redirectUrl = '<%= redirectUrl %>';

function pageLoad() {

    $('#formPassBox').dialog({
        autoOpen: false,
        width: 400,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
            "Ok": function() {
                window.location.href = redirectUrl;
            }
        },
        open: function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
            var t = window.setTimeout("goToUrl()", 5000);
        }
    });

    if(formSubmitPass == 'True')
    {
        $('#formPassBox').dialog({
            autoOpen: true
        });
    }

那么如何从后面的代码强制回发,或者在异步回发上重新加载 JavaScript,或者以一种可以继续进行异步表单验证的方式执行此操作?

编辑:我在后面代码的最后更改了 formSubmitPass:

If errorCount = 0 Then
            formSubmitPass = True
            upForm.Update()
        Else
            formSubmitPass = False
        End If

因此,在完整的回发中,值确实发生了变化。

4

3 回答 3

2

我听起来更像是 html 正在被更新面板替换,并且您的 jQuery 选择器没有绑定到新元素。

尝试对所有事件使用 .Live,或在 ajax 更新后重新绑定(您可以为此使用UpdatePanel插件)

于 2010-05-07T21:30:07.633 回答
0

不完全确定您要做什么。<%= formSubmitPass %>当然不会重新评估,因为这是一个仅在页面重新加载时设置的服务器变量。即使您再次执行 javascript,该值也不会改变。

但是,您也可以将succes回调传递给该.dialog()方法:

$('#formPassBox').dialog({
  // ...
  success: function(){ 
    // do something, e.g.
    $("#formPassBox").dialog({autoOpen:false});
  }
});
于 2010-05-07T21:01:27.207 回答
0

我想通了,对我有用的是首先将对话框javascript放在page_load中,以便将自动打开属性设置为false,如下所示:

function pageLoad() {

    $('#formPassBox').dialog({
        autoOpen: false
     });
}

然后创建一个完全独立的函数,如下所示:

function formSubmitPass() {
    $('#formPassBox').dialog({
        autoOpen: true,
        width: 400,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
            "Ok": function() {
                window.location.href = redirectUrl;
            }
        },
        open: function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
            var t = window.setTimeout("goToUrl()", 10000);
        }
    });
}

然后按照这些问题的指示使用 RegisterStartupScript:在更新面板中提交表单后运行 javascript?以及ScriptManager.RegisterStartupScript 有什么问题?

我的代码:

ScriptManager.RegisterStartupScript(Me, upForm.GetType(), "AutoPostBackScript", "formSubmitPass();", True)

注意:确保使用 ScriptManager 而不是 ClientScript,第二个参数也使用更新面板上的 GetType()。

我没有在后面的代码上使用 stringbuilder (有效使用 ASP.NET RegisterStartupScript 方法 ),我觉得将 javaScript 放在后面的代码上很笨拙,我只是制作了单独的函数并调用它,效果很好

于 2010-05-10T21:25:06.487 回答