2010-03-30 3 views
1

Я постараюсь быть кратким:ASP.NET AJAX UpdatePanel проблема

1) I have a dropdownlist with Autopostback set to TRUE 
2) I have an UpdatePanel that contains a Label. 
3) When the downdownlist selection is changed, I want to update the label. 

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

Мой "решение": В случае DropDownList_SelectionChanged установите фокус назад выпадающего списка:

dropdownlist1.focus()

Проблема:

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

Как этого избежать, поэтому он работает в FF, как в IE?

+0

Я могу предложить щедрость сразу с места в карьер на этом месте. Мне нужен ответ. Я ищу решение, которое не связано с отказом от элемента управления UpdatePanel. – ChadD

ответ

2

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

  • Программным - Page.MaintainScrollPositionOnPostBack = истина;
  • декларация Page - <% MaintainScrollPositionOnPostback @ Page = "истинный" %>
  • В web.config - < страницы maintainScrollPositionOnPostBack = "истинный"/>

Вам также может понадобиться, чтобы добавить JavaScript после декларация ScriptManager:

<script type="text/javascript"> 

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

prm.add_beginRequest(beginRequest); 

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

</script> 
+0

+1 хороший, не знал об этой функции. –

+0

Мальчик, я взволновался - пока не попробовал, и это не сработало. Я добавил его в корневой проект web.config.Я использую VS2010 RC – ChadD

+0

Давайте попробуем вставить объявление страницы и добавить скрипт после диспетчера сценариев (у меня была эта проблема, она сосала, в итоге я получил ее на работу) –

0

попробовать это один

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

    function beginRequest() { 
     prm._scrollPosition = window.top; 
    } 
</script> 
0

Был тот же самый вопрос и получил ответ. Надеюсь, что это помогает: 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();  
    }    

+1

Javascript, и я не знаю, что такое объект PageRequestManager: http://screencast.com/t/T8pSyZW1vw Справка Plz. – ChadD

1

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

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

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

<asp:ScriptManager runat="server" id="sm" /> 
0
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, но при необходимости вы можете переписать его. В основном просто задерживает скрипт фокуса.

Смежные вопросы