我开发了一个在Facebook上使用的ASP.NET应用程序。它有一个简单的链接按钮,用于在旧版本的Firefox中按预期工作。
<asp:LinkButton ID="lbtnLogOut" runat="server">Disconnect</asp:LinkButton>
Protected Sub lbtnLogOut_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbtnLogOut.Click
Response.Redirect(Request.ApplicationPath & "/login.aspx")
End Sub
将Firefox升级到8后,我发现链接按钮无法正常工作,即该按钮不会导致回发。当我查看源代码时,导致回发的链接按钮的Javascript代码是
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
我使用Firebug调试上面的代码但是当我点击链接按钮时_doPostBack函数没有触发。它适用于所有其他浏览器(IE 9,谷歌浏览器,Safari)。
注意:我在Facebook中使用此ASP.Net Web应用程序作为应用程序。 Facebook基本上使用iFrame在其中显示该网站。
有一个类似的问题here,但它没有为我提供任何解决方案。 想知道这个问题是由Facebook iFrame还是Firefox引起的?任何帮助将不胜感激。
答案 0 :(得分:1)
看起来你并没有为LinkButton分配一个事件处理程序。
<asp:LinkButton ID="LinkButton1" runat="server" Text="Click" OnClick="LinkButton1_Click" />
您发布的JavaScript是__doPostBack
函数,它不是LinkButton独有的。在LinkButtons使用__doPostBack
来触发回发的意义上,你是正确的,但除非你为LinkButton分配一个事件处理程序,否则不会调用该函数。
出于调试目的,我还要将CausesValidation
设置为false,以确保验证不会干扰点击事件。
答案 1 :(得分:0)
只需在。</body>
标记之前的.master文件或其他appriopiate文件中使用此代码:
<script language="javascript" type="text/javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.aspnetForm;
}
else {
theform = document.forms["aspnetForm"];
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
将'aspnetForm'替换为您自己的。