2016-04-13 1 views
0

У меня есть страница ASP.Net 4.5.1, написанная на C#, на которой есть несколько TextBoxes. Когда текст в любом из TextBoxes изменяется, я хочу вызвать метод, который 1) включает кнопку Save и b) перемещает фокус в TextBox со следующим TabIndex после TextBox, который запускал PostBack. Вот мой код до сих пор:Установить TabIndex в следующий элемент управления в ASP.Net

protected void EnableSaveButton(object sender, EventArgs e) 
    { 
     if ((REQUEST_PHASE)this.CurrentPhaseID == REQUEST_PHASE.RECORDS) 
     { 
      btnSaveACProperty.Disabled = false; 
      Control control = (Control)sender; 
      int tabindex = 0; 
      if (control != null) 
      { 

      } 
     } 
    } 

То, что я хочу сделать, это получить TabIndex управления, а затем найти элемент управления с TabIndex + 1 и сделать SetFocus() на нем. Моя проблема в том, что управляющая переменная в моем коде не имеет свойства TabIndex. Как мне это сделать?

+1

Причинение страницу, чтобы получить возможность отправлять обратно на сервер каждый раз, когда текстовое поле изменения, кажется плохой идеей. Вы должны делать это в javascript. –

+0

К сожалению, мне нужно проверить this.CurrentPhaseID в моем коде и делать это только тогда, когда оно установлено на определенное значение. В противном случае я бы рассмотрел javascript. Но я могу решить игнорировать CurrentPhaseID, если это делается на заднем конце, становится кошмаром. Так что спасибо за предложение. – Melanie

+1

Да: https://stackoverflow.com/questions/7208161/focus-next-element-in-tab-index –

ответ

0

Причина, по которой страница, отправляемая на сервер при каждом изменении текстового поля, кажется плохой идеей. В Javascript гораздо лучше делать подобные вещи.

Ответы на вопросы this question имеют различные рекомендации по настройке фокуса на следующий элемент управления, включая a jQuery plugin, firing a keyboard event и navigating the DOM to find the next control.

$(function(){ 
    $("form").on("change", ":input", function(){ 
     $(":submit[name$=btnSaveACProperty]").prop("disabled", false); 
     $.tabNext(); 
    }); 
}); 

Должно быть достаточно просто включить или отключить эту функциональность в зависимости от состояния на сервере. Например, если вы поставите Javascript во внешнем файле, вы можете условно включить его:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    switch ((REQUEST_PHASE)this.CurrentPhaseID) 
    { 
     case REQUEST_PHASE.RECORDS: 
     { 
      Page.ClientScript.RegisterClientScriptInclude(
       typeof(REQUEST_PHASE), "MoveFocusOnChange", 
       "~/scripts/moveFocusOnChange.js"); 
      break; 
     } 
    } 
} 
+0

К сожалению, jquery не работает. Он не позволяет кнопке или вкладкам следующий элемент управления. Исследование DOM показывает мне элемент управления формой, в котором находятся все мои другие таблицы и элементы управления, поэтому я не уверен, почему. Если вы можете предложить что-то простое, что мне не хватает, отлично. В противном случае, давайте отпустим его; Я решил проблему с некоторым довольно неуклюжим javascript. PS - src, на который я указываю jQuery, - это jquery-1.4.1.js, который был включен в проект обратно, когда он был создан в .Net 2.0. – Melanie

+0

@ Melanie: Это действительно старая версия jQuery! Метод 'on' был добавлен в 1.7; метод «делегировать» был в 1.4.3; поэтому, похоже, вам придется использовать либо [метод 'live'] (https://api.jquery.com/live/), либо [метод' change'] (https://api.jquery.com/change /) для присоединения обработчика событий. –

+0

Итак, первая строка становится $ («панель»). Live (function() {right? – Melanie

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