ASP.NET AJAX UpdatePanel проблема с прокруткой - PullRequest
1 голос
/ 30 марта 2010

Я постараюсь быть кратким:

  1. У меня есть выпадающий список с Autopostback, установленным на true
  2. У меня есть UpdatePanel, которая содержит Label.
  3. Когда изменяется список downdownlist, я хочу обновить метку.

Проблема: в раскрывающемся списке фокус потерян, и пользователь вынужден щелкнуть раскрывающийся список, чтобы вернуть фокус обратно к элементу управления.

Мое "решение": в событии DropDownList_SelectionChanged установите фокус обратно на раскрывающийся список:

dropdownlist1.focus()

Хотя в IE это прекрасно работает, Firefox и Chrome изменяют положение прокрутки таким образом, чтобы элемент управления, которому был назначен фокус, располагался внизу видимой части окна браузера. Это часто очень дезориентирующий побочный эффект.

Как этого избежать, чтобы он работал в FF, как в IE?

Ответы [ 5 ]

3 голосов
/ 30 марта 2010

Попробуйте MaintainScrollPositionOnPostback одним из этих 3 способов

  • Программно - Page.MaintainScrollPositionOnPostBack = true;
  • Объявление страницы - <% @ Page MaintainScrollPositionOnPostback = "true"%>
  • В файле web.config -

Вам также может понадобиться добавить этот javascript после объявления scriptmanager:

<script type="text/javascript">

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_beginRequest(beginRequest);

function beginRequest()
{
    prm._scrollPosition = null;
}

</script> 
1 голос
/ 23 декабря 2010

Велика - Извините за задержку. Если вы используете главную страницу, добавьте:

<asp:ScriptManagerProxy runat="server" ID="smp"></asp:ScriptManagerProxy>

В противном случае просто добавьте

<asp:ScriptManager runat="server" id="sm" />
0 голосов
/ 30 апреля 2013
public static void SetFocusByJavaScript(Page page, string clientID)
        {
            string uniqueScriptId = String.Concat("focusScript", clientID);
            string scriptBody = String.Format("setTimeout(\"$get('{0}').focus();\", 100);", clientID);
            ScriptManager.RegisterStartupScript(page, page.GetType(), uniqueScriptId, scriptBody, true);
        }

Вот как я обошёл эту проблему. В примере требуется jquery, но при необходимости вы можете переписать его. В основном просто задерживает фокус сценария.

0 голосов
/ 11 ноября 2010

Имел ту же самую проблему и получил ответ. Надеюсь это поможет : http://forums.asp.net/p/1622050/4164858.aspx#4164858

 <script type="text/javascript">  
 var xPos, yPos;  
 var postBackElement;  

 var prm = Sys.WebForms.PageRequestManager.getInstance();  
 prm.add_endRequest(EndRequestHandler);  
 prm.add_initializeRequest(InitializeRequest);  

 function EndRequestHandler(sender, args) {  
     if (postBackElement != null) {  
         document.getElementById(postBackElement.id).focus();  
     }  
 }  
 function InitializeRequest(sender, args) {    
      postBackElement = args.get_postBackElement();    
  }            

0 голосов
/ 01 июля 2010

попробуйте это

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_beginRequest(beginRequest);

    function beginRequest() {
        prm._scrollPosition = window.top;
    }
</script> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...