2013-05-15 1 views
0

나는 vb.net으로 webapp를 만들고 있으며 포스트 백 후에 포커스를 다른 텍스트 상자로 변경하려면 UpdatePanel 안에 TextBox를 만들어야합니다. ViewState를 사용하여 포커스가 어디에 있어야하는지 알기 위해로드 할 때 읽을 수있는 음조를 저장하기로 결정했습니다 (7 개의 텍스트 상자가 그런 식으로 작동해야 함). 그러나 단 하나의 작업 만 할 수는 없습니다. 다음은 작동하지 않는 최소 코드입니다.ViewState가 포스트 백 동안 값을 저장하지 않습니다.

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

여기 Page_Load입니다.

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에 값을 추가하는 코드가 실행됩니까?

"작동하지 않음"이란 무엇을 의미합니까? 당신은 무엇을 기대 했습니까? 실제로 어떤 일이 일어 났습니까?

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

그것은이 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

당신이하고있는 것은 작동하지 않습니다 어떤 경우

는이 작업을 수행하는 가장 간단한 방법은 예를 들어 ViewState를 바탕으로 귀하의 페이지에 속성을 추가 할 수 있습니다 TextChanged 이벤트가 실행되기 전에 page_load 메서드가 실행되기 때문입니다.

이 시도 :

  1. 이 페이지에 스크립트 관리자를 추가;
  2. page_load 로직을 page_preRender 이벤트에 넣으십시오.이 이벤트는 textchanged 이벤트를 발생시키지 않습니다. 입력 누르면

    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