在更新面板中提交表单后运行javascript?

时间:2010-05-08 16:51:45

标签: .net javascript jquery updatepanel postback

这让我抓狂!我已经阅读了至少5个与我的问题密切相关的问题,并且可能只有5个左右的网页来自谷歌搜索。我只是不明白。

我试图在用户填写表格'注册提交'然后重定向到另一个页面后出现jqueryui对话框,但我不能为我的生活得到任何javascript工作,甚至没有一个警报。

以下是我的更新小组:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="upForm" runat="server" 
    UpdateMode="Conditional" ChildrenAsTriggers="False">
    <ContentTemplate>
               'Rest of form'
         <asp:Button ID="btnSubmit" runat="server" Text="Submit" /> 
              <p>Did register Pass? <%= registrationComplete %></p>
    </ContentTemplate>
</asp:UpdatePanel>

我想要执行的Jquery :(现在它位于标记的头部,autoOpen设置为false)

<script type="text/javascript"> 
function pageLoad() {

    $('#registerComplete').dialog({
        autoOpen: true,
        width: 270,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
          "Ok": function() {
          window.location.href = "someUrl";
        }
        }
    });

}
     </script>

最后我的代码背后:(注释掉我尝试过的所有内容)

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSubmit.Click     
      'Dim sbScript As New StringBuilder()'
           registrationComplete = True
            registrationUpdatePanel.Update()

            'sbScript.Append("<script language='JavaScript' type='text/javascript'>" + ControlChars.Lf)'
            'sbScript.Append("<!--" + ControlChars.Lf)'
            'sbScript.Append("window.location.reload()" + ControlChars.Lf)'
            'sbScript.Append("// -->" + ControlChars.Lf)'
            'sbScript.Append("</")'
            'sbScript.Append("script>" + ControlChars.Lf)'

            'ScriptManager.RegisterClientScriptBlock(Me.Page, Me.GetType(), "AutoPostBack", sbScript.ToString(), False)'
            'ClientScript.RegisterStartupScript("AutoPostBackScript", sbScript.ToString())'
                            'Response.Write("<script type='text/javascript'>alert('Test')</script>")'
            'Response.Write("<script>windows.location.reload()</script>")'
End Sub

我试过了:

  • 将变量从服务器传递到 客户通过内联&lt;%=%&gt;在里面 头标记的javascript块。

  • 将相同的代码放在脚本中 updatePanel中的标记。

  • 试图用 RegisterClientScriptBlock和
    的RegisterStartupScript

  • 使用。执行Response.Write 写在其中的脚本标记。

  • 尝试了推杆的各种组合 整个jquery.dialog代码 registerstartup脚本,或只是
    试图改变autoOpen
    财产,或只是在上面打电话“打开” 它

我甚至无法得到一个简单的提醒来处理其中任何一个,所以我做错了但我只是不知道它是什么。

以下是我所知道的:

  • Jquery甚至可以正常绑定 关于异步回发,因为div 作为对话框的容器是 总是看不见的,我看到了一个相似的 在这里发帖说明是造成的 一个问题,这不是这里的情况。

  • 使用page_load而不是
    document.ready自那以后 在异步和正常运行上运行 回发,所以这不是问题。

  • 更新面板正在更新 正确,因为<p>Did register Pass? <%= registrationComplete %></p>在我之后更新为true 提交表格。

那么我怎样才能做到这一点?我想要的只是 - &gt;点击更新面板内的提交按钮 - &gt;运行服务器端代码以验证表单并插入到db - &gt;如果一切顺利,请弹出jquery(模态)对话框,说它有效。

2 个答案:

答案 0 :(得分:3)

您可以结帐endRequest event

function pageLoad() {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e) {
        // this function will be executed after the update panel finished 
        // the AJAX request, so here you may open your jQuery dialog

        if (e.get_error()) {

        } else {

        }
    });
}

答案 1 :(得分:2)

要从Codebehind注册,here's the format

ClientScript.RegisterStartupScript(GetType(), "AutoPostBackScript", 
                                   "alert('hi');", True);

最后的true告诉它将您的代码包装在<script>标签中,如果您想自己制作标签,请将其关闭。