Почему IE не обновляет страницу после JS-вызова для нажатия кнопки? - PullRequest
0 голосов
/ 28 сентября 2011

На странице ASP.Net у меня проблема только с IE.Вот описание.

На странице есть две кнопки и одна метка.Первая кнопка видна и вызывает функцию JS для события click.Эта функция JS вызывает функцию щелчка второй кнопки.Вторая кнопка имеет обработчик события C € для события click.Обработчик событий 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 # code-сзади:

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 ]

1 голос
/ 28 сентября 2011

Я думаю, что проблема в том, как вы пытаетесь получить скрытую кнопку

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

, возможно, измените ее на

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

После того, как кнопки отображаются в браузере,Идентификатор изменен механизмом ASP.Net и не совпадает с вашим источником.

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

Надеюсь, это поможет.

1 голос
/ 28 сентября 2011

Идентификатор вашей кнопки не будет 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 - она ​​обманывает разработчиковМысль о том, что Интернет представляет собой подключенную среду.

Что действительно происходит, когда вы щелкаете элемент <asp:Button /> по умолчанию, так это то, что вызывается обратная передача .Т.е. ваш браузер отправляет на сервер запрос на новую страницу.Он отправляет что-то под названием ViewState , так как сервер знает, что вы сделали и что нужно отрендерить.Как таковое «событие» не обрабатывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...