Сохранение акцента на панели обновления ajax после обновления формы - PullRequest
2 голосов
/ 12 мая 2009

У меня есть форма просмотра, предназначенная для обновления его источника данных каждый раз, когда изменяется текстовое поле или выпадающий список. Для каждого события text_changed и его эквивалента для других элементов управления я вызываю метод formView.UpdateItem, и это приводит к тому, что форма теряет фокус из-за элемента управления, к которому я добавила вкладку.

Я пытался реализовать этот метод , но я получаю неизвестные ошибки времени выполнения после попытки выбрать элемент управления во второй раз.

Я не могу не думать, что есть другой способ справиться с этим.

Как бы вы решили эту проблему?

Ответы [ 2 ]

1 голос
/ 12 мая 2009

Для подобных вещей я часто прячу значение в элемент управления asp: Hidden (input type = "hidden"), используя javascript, а затем добавляю функцию pageLoad (в javascript), чтобы проанализировать это поле и затем установить фокус , Таким образом, идентификатор сфокусированного элемента управления сохраняется через обратную передачу.

Примерно так (псевдокод):

<input type="hidden" id="focusHolder" />

function onSubmit (registered via ClientScript.RegisterOnSubmitStatemnet) {
grab the target and stash id in #focusHolder
}

function pageLoad() {
$get($get('focusHolder').value).focus();
}
0 голосов
/ 11 апреля 2013

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

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
            {
                string IDPostbackCtrl = GetAsyncPostBackControlID(Page, Page.Request);
                ScriptManager.GetCurrent(Page).SetFocus(IDPostbackCtrl);
            }
        }
    }

    public string GetAsyncPostBackControlID(Page page, HttpRequest request)
    {
        string smUniqueId = ScriptManager.GetCurrent(page).UniqueID;
        string smFieldValue = request.Form[smUniqueId];

        if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains('|'))
            return smFieldValue.Split('|')[1];

        return String.Empty;
    }
...