【问题标题】:Maintaining focus on ajax update panel after updating form更新表单后保持对 ajax 更新面板的关注
【发布时间】:2009-05-12 15:32:58
【问题描述】:

我有一个表单视图,旨在在每次更改 text_changed 事件或下拉列表时更新其数据源。在每个 text_changed 事件和其他控件的等效事件上,我都会调用 formView.UpdateItem 方法,这会导致表单失去焦点从我已经向下切换到的控件。

我尝试实现this method,但在第二次尝试选择控件后出现未知的运行时错误。

我不禁想到还有另一种处理方式。

你会如何解决这个问题?

【问题讨论】:

    标签: asp.net javascript updatepanel tabbing


    【解决方案1】:

    对于这样的事情,我经常使用 javascript 将值存储在 asp:Hidden 控件 (input type="hidden") 中,然后添加一个 pageLoad 函数(在 javascript 中)来解析该字段,然后设置焦点.这样,焦点控件的 id 通过回发保持不变。

    类似这样的东西(伪代码):

    <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();
    }
    

    【讨论】:

    • 能否给出详细准确的代码?我不擅长 javascript。
    【解决方案2】:

    您也可以在服务器端执行此操作。下面是一个如何将焦点放在导致异步回发的控件上的示例:

        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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多