为什么IE在JS调用单击按钮后不刷新页面?

时间:2011-09-28 08:01:10

标签: c# javascript asp.net internet-explorer

在ASP.Net页面上,我只在IE问题面前出现问题。这是描述。

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

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

另外,我在IE中观察到在点击JS按钮后调用了Page_Load事件两次: 的Page_Load button2_OnClick =>更改标签文本 Page_Load =>标签文本已重置:(

在Firefox中,Page_Load只被调用一次。

我的问题是:如何在点击JS按钮后使Firefox正确刷新页面?

以下是示例测试代码:

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";
    }
}

2 个答案:

答案 0 :(得分:1)

渲染时,按钮的ID不会是button1或button2。它可能类似于ctl001_button1。因此,您的JavaScript将无法正常工作。在ASP.NET 4中,您可以使用指定的ClientID覆盖此行为。

    <asp:Button runat="server" ID="button1" Text="Click-me!" 
           OnClientClick="button1Click();" ClientIDMode="Static" />
    <asp:Button runat="server" ID="button2" Text="Second" 
           OnClick="button2_OnClick" style="display:none" ClientIDMode="Static" />

顺便说一句,这暗示了ASP.NET Winforms的主要问题 - 它让开发人员误以为Web是一个连接环境。

默认情况下单击<asp:Button />元素时实际发生的情况是调用回发。即您的浏览器向服务器发送请求以获取新页面。它发送一个名为 ViewState 的东西,这是服务器知道你做了什么以及要渲染什么的。没有“事件”处理。

答案 1 :(得分:1)

我认为问题在于您尝试获取隐藏按钮的方式

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

可能会将此更改为

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

在浏览器中呈现按钮后,ASP将由ASP.Net引擎更改,而不是与您的源相同。

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

希望这有帮助。