Postback后将焦点放在postback的源头上
控件在引起postback后,在__EVENTTARGET中有控件的信息(button除外).所以根据这个可以在
Postback后将焦点放在postback的源头上。
我写了一个基类,要实现这种效果的继承这个类就行了。
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default4.aspx.vb" Inherits="Default4" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button1" /><BR>
<asp:Button ID="Button2" runat="server" Text="Button2" /><BR>
<asp:Button ID="Button3" runat="server" Text="Button3" /><BR>
<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton> <BR>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack=true>
</asp:DropDownList>
</div>
</form>
</body>
</html>
Partial Class Default4
Inherits Helper
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim values As ArrayList = New ArrayList()
values.Add("IN")
values.Add("KS")
values.Add("MD")
values.Add("MI")
values.Add("OR")
values.Add("TN")
DropDownList1.DataSource = values
DropDownList1.DataBind()
End If
End Sub
End Class
Imports Microsoft.VisualBasic
Public Class Helper
Inherits System.Web.UI.Page
Private Sub GetPostbackControl(ByVal targPage As Page)
Dim ctl As Control = New Control
Dim ctl_tmp As Control = New Control
If (targPage.IsPostBack) Then
Dim ctlName As String = targPage.Request.Form("__EVENTTARGET")
If ((ctlName <> Nothing) And (ctlName <> String.Empty)) Then
ctl = targPage.FindControl(ctlName)
Else
For Each ctrl As String In targPage.Request.Form
If ctrl.EndsWith(".x") Or ctrl.EndsWith(".y") Then
ctlName = ctrl.Substring(0, ctrl.Length - 2)
ctl_tmp = targPage.FindControl(ctlName)
Else
ctl_tmp = targPage.FindControl(ctrl)
End If
If Not IsNothing(ctl_tmp) Then
If ctl_tmp.ToString = "System.Web.UI.WebControls.Button" Or _
ctl_tmp.ToString = "System.Web.UI.WebControls.LinkButton Then" Then
ctl = ctl_tmp
Exit For
End If
End If
Next
End If
ctl.Focus()
End If
End Sub
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
GetPostbackControl(CType(sender, Page))
End Sub
End Class


浙公网安备 33010602011771号