设置焦点控件 - AutoPostBack = true





0/5 (0投票)
用户经常抱怨页面滚动问题。例如:如果一个较长的页面底部有一个 AutoPostBack = true 的下拉列表,
用户经常抱怨页面滚动问题。
例如:如果一个较长的页面底部有一个 AutoPostBack = true 的下拉列表。选择后页面重新加载,焦点会移到页面顶部。用户需要再次向下滚动页面才能继续操作。这里提供一个示例解决方案...
c#
public void SetFocus(Page sPage)
{
string[] sCtrl = null;
string sCtrlId = null;
Control sCtrlFound = default(Control);
string sCtrlClientId = null;
string sScript = null;
sCtrl = sPage.Request.Form.GetValues("__EVENTTARGET");
if ((sCtrl != null))
{
sCtrlId = sCtrl[0];
sCtrlFound = sPage.FindControl(sCtrlId);
if ((sCtrlFound != null))
{
sCtrlClientId = sCtrlFound.ClientID;
sScript = "<SCRIPT language='javascript'>document.getElementById('" + sCtrlClientId + "').focus(); if (document.getElementById('" + sCtrlClientId + "').scrollIntoView(false)) {document.getElementById('" + sCtrlClientId + "').scrollIntoView(true)} </SCRIPT>";
sPage.ClientScript.RegisterStartupScript(typeof(string), "controlFocus", sScript);
}
}
}
在页面加载时调用此函数
示例:SetFocus(this);
vb.net
Public Sub SetFocus(ByRef sPage As Page)
Dim sCtrl() As String
Dim sCtrlId As String
Dim sCtrlFound As Control
Dim sCtrlClientId As String
Dim sScript As String
sCtrl = sPage.Request.Form.GetValues("__EVENTTARGET")
If Not IsNothing(sCtrl) Then
sCtrlId = sCtrl(0)
sCtrlFound = sPage.FindControl(sCtrlId)
If Not IsNothing(sCtrlFound) Then
sCtrlClientId = sCtrlFound.ClientID
sScript = "<SCRIPT language='javascript'>document.getElementById('" + sCtrlClientId + "').focus(); if (document.getElementById('" + sCtrlClientId + "').scrollIntoView(false)) {document.getElementById('" + sCtrlClientId + "').scrollIntoView(true)} </SCRIPT>"
sPage.RegisterStartupScript("controlFocus", sScript)
End If
End If
End Sub
示例:Me.SetFocus(Page)
这将设置最后使用的下拉列表的焦点。