这让我疯狂!我已经阅读了至少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(模态)对话框弹出说嘿它的工作。
@Nick:不知道为什么,但注册异步回发上的JavaScript从来没有工作给我,除非我使用参数更新面板的类型(UpdatePanel1.GetType()) – 2010-05-08 17:10:29
@Claudio - 取决于它从哪里被调用,应该从一个参与更新的控件,更新面板本身并不是一个不错的类型,所以是可行的:) – 2010-05-08 17:12:04
对于具有'UpdatePanels'的页面,您应该使用'ScriptManager'而不是'ClientScript'。 – lincolnk 2010-05-08 20:11:59