#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» нашел правильное решение в этом потоке.