2010-05-08 37 views
4

这让我疯狂!我已经阅读了至少5个与我的问题密切相关的问题,并且可能仅仅是来自Google搜索的5个或更多页面。我只是不明白。在更新面板中提交表单后运行javascript?

我想要一个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 

我试过了:

  • 通过行内<%=%>在 JavaScript的头标记的块传递变量从服务器到客户端 。

  • 将同一代码放入updatePanel中的脚本
    标记。

  • 尽量选用
    的RegisterClientScriptBlock和
    的RegisterStartupScript

  • 只是做写在它的 脚本标签的Response.Write。

  • 试图把 整个jquery.dialog代码在 registerstartup脚本,或者只是
    试图改变的AutoOpen
    财产,或者只是呼吁
    其“开放”的各种组合。

我什至不能得到一个简单的警报与任何这些工作,所以我做错了什么,但我只是不知道它是什么。

这是我所知道的:

  • jQuery的甚至 在异步回发正确结合,因为在div 容器,它的对话框是 总是看不见的,我看到了一个类似的 后这里指出这是造成 的一个问题,这里不是这种情况。

  • 使用的Page_Load,而不是
    的document.ready因为这是应该 到两个异步和正常
    回发运行,所以这不是问题。

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

那么我该如何做这项工作?我想要的是 - >单击更新面板内的提交按钮 - >运行服务器端代码来验证表单并插入到数据库 - >如果一切成功,有jQuery(模态)对话框弹出说嘿它的工作。

回答

2

要从代码隐藏注册,here's the format

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

true上月底告诉它来包装你的代码<script>标签,把它关闭如果你想自己做标签。

+0

@Nick:不知道为什么,但注册异步回发上的JavaScript从来没有工作给我,除非我使用参数更新面板的类型(UpdatePanel1.GetType()) – 2010-05-08 17:10:29

+0

@Claudio - 取决于它从哪里被调用,应该从一个参与更新的控件,更新面板本身并不是一个不错的类型,所以是可行的:) – 2010-05-08 17:12:04

+1

对于具有'UpdatePanels'的页面,您应该使用'ScriptManager'而不是'ClientScript'。 – lincolnk 2010-05-08 20:11:59

3

您可以检出endRequest event

​​
+0

那么我怎么会通过它像我上面做的变量?我碰到的问题是,在页面加载时,我在<%= %>中传递的变量仅运行一次。任何后续的异步回发可能会运行该代码,但它不会更新到registrationComplete的最新值。在你的例子中,E是什么?这一页?所以在你的例子中,我会在后面的代码中有一个get_error()函数,它会工作吗?或者会在Javascript中?如果在Javascript中,我仍然遇到给它更新值的问题。 – AverageJoe719 2010-05-09 20:27:28