2011-09-28 83 views
0

在ASP.Net页面上,我只在IE浏览器出现问题。这里是描述。为什么IE在JS调用点击按钮后不刷新页面?

在页面上有两个按钮和一个标签。第一个按钮是可见的,并在click事件上调用JS函数。这个JS函数调用第二个按钮的点击功能。第二个按钮在click事件上有一个C€事件处理程序。 C#事件处理程序编辑标签。

在Firefox中:点击后标签被正确编辑。 在IE(8)中:尽管C€事件处理程序已正确命中,但未对标签进行编辑。

另外,我观察到,在IE中,Page_Load事件是JS按钮点击后两次调用: 的Page_Load button2_OnClick =>标签文本的变化 的Page_Load =>标签文本复位:(

在Firefox中,在Page_Load只调用一次

我的问题是:?如何让IE刷新正确的页面作为Firefox没有一个JS按钮后点击

下面是示例测试代码:

1)页ASPX

<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function button1Click(sender, args) { 
      var button2 = document.getElementById("button2"); 
      button2.click(); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button runat="server" ID="button1" Text="Click-me!" OnClientClick="button1Click();" /> 
     <asp:Button runat="server" ID="button2" Text="Second" OnClick="button2_OnClick" style="display:none" /> 
     <p /> 
     <asp:Label runat="server" ID="label1" Text="Init" /> 
    </div> 
    </form> 
</body> 
</html> 

2)C#代码隐藏:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void button2_OnClick(object sender, EventArgs e) 
    { 
     label1.Text = "Changed"; 
    } 
} 

回答

1

当它呈现的按钮的ID将不会被BUTTON1或BUTTON2。它可能会像ctl001_button1一样。所以你的JavaScript不会工作。在ASP.NET 4中,您可以使用指定的ClientID来覆盖此行为。另外,这提到了ASP.NET Winforms的主要问题 - 它让开发人员认为Web是一个连接的环境。

默认情况下单击<asp:Button />元素时发生的实际情况是调用回发。即您的浏览器向服务器发送请求以获取新页面。它发送了一个叫做的ViewState,这就是服务器如何知道你已经完成了什么以及要呈现什么。没有像这样处理的“事件”。

+0

我使用ASP.Net 3.5,所以我不能使用它。此外,button1和button2在最终客户端页面中呈现为相同的ID,而不是像ctl001_button1之类的东西。 – WolveFred

+0

我在第一篇文章中添加了一个有趣的信息:“另外,我在IE中观察到,在JS按钮点击[...]后两次调用Page_Load事件”。 – WolveFred

+0

尝试在'button1Click()'方法中放入'return false'。 –

1

我认为这个问题是你试图让隐藏的按钮,按钮的浏览器中呈现后

var button2 = document.getElementById("button2"); 

也许更改为

var button2 = document.getElementById("<%= button2.ClientID %>"); 

的方式,ID为由ASP.Net引擎改变,而不是你的来源相同。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx

希望这有助于。

+0

这不是一个坏主意,但是这并没有解决问题,因为button2已经被正确地检索,并且正确调用了click方法。 – WolveFred

+0

** Doh **,我读过上一篇文章的更新内容。但为什么第一个按钮是一个asp.net控件困扰我,你真的应该用一个html输入按钮替换它,并从那里调用javacript。 – Sitnam

+0

你究竟想要达到什么目的? – Sitnam