2013-05-15 3 views
0

Я делаю webapp с vb.net, и мне нужно сделать TextBox внутри UpdatePanel, чтобы сменить фокус на другое текстовое поле после PostBack. Я решил использовать ViewState для сохранения numbre, который будет читаться при загрузке, чтобы знать, где должен быть фокус (есть семь текстовых полей, которые должны работать так), но я не могу сделать только одну работу. Вот минимальный код, который не работает.ViewState не сохраняет значения во время PostBack

 Dim g As Integer 
    g = 1 
    ViewState.Add("foco", g) 

И вот страница PageLoad.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 


    If Page.IsPostBack Then 
     If ViewState("foco") = 1 Then 
      TextBox1.Focus() 
     End If 
    End If 

End Sub 

ответ

0

Похоже, что вы не увеличиваете счетчик между обратными передачами.

If Page.IsPostBack Then 
     If ViewState("foco") = 1 Then 
      TextBox1.Focus() 
     ElseIf ViewState("foco") = 2 Then 
      TextBox2.Focus() 
     ElseIf ViewState("foco") = 3 Then 
      TextBox3.Focus() 
     End If 
     ViewState("foco") = ViewState("foco") + 1 
    Else 
     ViewState.Add("foco", 1) 
    End If 
0

Когда код, который добавляет значение в ViewState, выполняется?

Что вы подразумеваете под "не работает"? Что вы ожидали, и что на самом деле произошло?

В любом случае, самый простой способ сделать это может быть, чтобы добавить свойство к вашей странице, которая опирается на ViewState, например:

public int FocusIndex 
{ 
    get 
    { 
     object o = ViewState["foco"]; 
     return (o == null) ? -1 : (int) o; 
    } 
    set 
    { 
     ViewState["foco"] = value; 
    } 
} 
+0

Это TextBox на UpdatePanel, при нажатии войти, он должен заполнить список с результатами из базы данных, а затем сохранить количество текстового поля, чтобы сосредоточиться, когда возвращается обратной передачи. Я разместил код ниже. –

0
Protected Sub TextBox7_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox7.TextChanged 
    If TextBox7.Text = "" Then Exit Sub 


    ' ListBox1.Visible = True 


    ListBox1.Items.Clear() 



    Dim con As New Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=TEST08\AXSQLEXPRESS;Password=Axoft1988;User ID=sa;Initial Catalog=club_independiente") 
    con.Open() 

    'Dim com As New Data.OleDb.OleDbCommand("select * from emCaja where cod_client = '" & TextBox1.Text & "'", con) 
    ' If "" & com.ExecuteScalar() = "" Then 
    Dim com As New Data.OleDb.OleDbCommand 

    com = New Data.OleDb.OleDbCommand("select * from emConceptos where codigo = " & TextBox7.Text, con) 
    com.ExecuteNonQuery() 

    Dim dr As Data.OleDb.OleDbDataReader 
    dr = com.ExecuteReader 

    While dr.Read 
     ListBox1.Items.Add(dr("descripcion")) 
     ListBox1.Items(ListBox1.Items.Count - 1).Value = dr("codigo") 
    End While 
    dr.Close() 

    ' ListBox1.Focus() 

    If ListBox1.Items.Count > 0 Then 
     ListBox1.SelectedIndex = 0 
    End If 
    Dim g As Integer 
    g = 1 
    Session("foco") = g 

End Sub 
0

То, что вы делаете, не работает потому что метод page_load работает до того, как событие TextChanged имеет возможность выполнить.

Попробуйте это:

  1. добавить ScriptManager на странице;
  2. Поместите свою логику page_load в событие page_preRender, что гарантированно приведет к событию с измененным текстом;

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender 
    
        If Page.IsPostBack Then 
         If ViewState("foco") = 1 Then 
          ScriptManager1.SetFocus(TextBox1) 
         End If 
        End If 
    
    End Sub 
    
Смежные вопросы