3Newbie97Programmer Ответов: 1

Сохраняйте фокус в текстовом поле после обратной передачи


у меня 40 TextBox с autopostback элемента управления. Каждый раз, когда срабатывает autopostback, фокус возвращается к первому текстовому полю.

Что я уже пробовал:

.ASPX
<pre><tr>
 <td class="auto-style15">Item 1 :   <asp:TextBox ID="ItemBox1" runat="server" Height="20px" Width="220px" AutoPostBack="true" TabIndex="1" MaxLength="29"></asp:TextBox><asp:Label ID="lblmessage1" runat="server" ForeColor="Red"></asp:Label></td>
 
<td class="auto-style15">Item 2 :   <asp:TextBox ID="ItemBox2" runat="server" Height="20px" Width="220px" AutoPostBack="true" TabIndex="2" MaxLength="29"></asp:TextBox><asp:Label ID="lblmessage2" runat="server" ForeColor="Red"></asp:Label></td>
</tr>


.Aspx-файл.ВБ
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack Then
            Dim wcICausedPostBack As WebControl = CType(GetControlThatCausedPostBack(TryCast(sender, Page)), WebControl)
            Dim indx As Integer = wcICausedPostBack.TabIndex
            Dim ctrl = From control In wcICausedPostBack.Parent.Controls.OfType(Of WebControl)() Where control.TabIndex > indx Select control
            ctrl.DefaultIfEmpty(wcICausedPostBack).First().Focus()
        End If
    End Sub

    Protected Function GetControlThatCausedPostBack(ByVal page As Page) As Control
        Dim control As Control = Nothing

        Dim ctrlname As String = page.Request.Params.Get("__EVENTTARGET")
        If ctrlname IsNot Nothing AndAlso ctrlname <> String.Empty Then
            control = page.FindControl(ctrlname)
        Else
            For Each ctl As String In page.Request.Form
                Dim c As Control = page.FindControl(ctl)
                If TypeOf c Is System.Web.UI.WebControls.Button OrElse TypeOf c Is System.Web.UI.WebControls.ImageButton Then
                    control = c
                    Exit For
                End If
            Next ctl
        End If
        Return control

    End Function

1 Ответов

Рейтинг:
4

Karthik_Mahalingam

попробовать это
я написал на языке Си#

protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) {
                string targetId = Page.Request.Params.Get("__EVENTTARGET");
                Page.ClientScript.RegisterStartupScript(this.GetType(), "focusthis", "document.getElementById('" + targetId + "').focus()", true);

            }
        }


3Newbie97Programmer

не могли бы вы изменить его на vb im new to programming. Спасибо

Karthik_Mahalingam

If Page.IsPostBack Then
    Dim targetId As String = Page.Request.Params.Get("__EVENTTARGET")
    Page.ClientScript.RegisterStartupScript(Me.GetType, "focusthis", ("document.getElementById('"  _
                    + (targetId + "').focus()")), true)
End If

katxalot

если (стр.IsPostback)
{
строка targetId = страница.Запрос.Params. Get ("__EVENTTARGET");
Страница.FindControl (targetId).Сосредоточить();
}