meluckeve

导航

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 ObjectByVal 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 <> NothingAnd (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 ObjectByVal e As System.EventArgs) Handles Me.Load
        GetPostbackControl(
CType(sender, Page))
    
End Sub

End Class

posted on 2005-07-15 18:09  lucksleep  阅读(276)  评论(0编辑  收藏  举报