Firefox «прыгает» при использовании UpdatePanel и SetFocus в (asp.net )

#asp.net

#asp.net

Вопрос:

У меня проблема в том, что Firefox «прыгает» (перемещает полосу прокрутки наверх), если я использую UpdatePanel вместе с функцией SetFocus внутри iframe. Я покажу это, опубликовав код:

Прежде всего HTML веб-формы:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" onselectedindexchanged="DropDownList1_SelectedIndexChanged">
                    <asp:ListItem>1</asp:ListItem>
                    <asp:ListItem>2</asp:ListItem>
                    <asp:ListItem>3</asp:ListItem>
                    <asp:ListItem>4</asp:ListItem>
                    <asp:ListItem>5</asp:ListItem>
                </asp:DropDownList>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>
  

Теперь код привязан к этой форме (у нее нет функций, кроме пустой page_load и этой):

  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label1.Text = DropDownList1.SelectedIndex.ToString();
            SetFocus(DropDownList1);
        }
  

Хорошо, эта форма размещена внутри простой HTML-страницы с использованием iframe. Вот главная страница HTML:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<div>
        bla bla bla
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <iframe src="WebForm1.aspx" style="height: 1263px; width: 1254px"></iframe>
    </div>

</body>
</html>
  

Я добавил элементы br, потому что вам нужны полосы прокрутки, чтобы увидеть эффект. Теперь, если вы прокрутите страницу хоста вниз и выберете значение в выпадающем списке в iframe в Internet Explorer, метка обновляется без каких-либо проблем, и выпадающий список получает фокус.

Теперь попробуйте то же самое в Firefox — все тоже работает, но вы получаете раздражающий эффект, когда firefox снова прокручивает главную страницу html наверх!

Я пробовал это с еще большими страницами и несколькими iframes, и, похоже, он прокручивается до начала одного iframe, в котором вы выбрали значение в выпадающем списке. Safari (и, я думаю, Chrome) ведет себя так же. Opera не выполняет этот раздражающий «прыжок» (то же самое с IE).

В чем здесь проблема?

Ответ №1:

Хорошо, после долгих поисков я нашел решение:

http://forums.asp.net/t/1622050.aspx/1/10

Пользователь «DotNetSeeker» нашел правильное решение в этом потоке.