문제

이 주제에 대해 몇 가지 질문이 있었지만 여전히 문제가있었습니다.

리피터 컨트롤 내에서 여러 드롭 다운 및 텍스트 상자 컨트롤의 값을 찾고 싶습니다.

db.ConnectionString = SystemConnString
    db.Open()

    Dim selectedAdTitle As String = ""
    Dim enteredAdFullName As String = ""

    cmd.Parameters.Add(New SqlParameter("@TransactionID", TransactionID))
    cmd.Parameters.Add(New SqlParameter("@AdTitle", selectedAdTitle))
    cmd.Parameters.Add(New SqlParameter("@AdFullName", enteredAdFullName))

    For i As Integer = 0 To myRepeater.Items.Count - 1

        Dim AdTitle As DropDownList = DirectCast(myRepeater.Items(i).FindControl("AdTitle"), DropDownList)
        Dim AdFullName As TextBox = DirectCast(myRepeater.Items(i).FindControl("AdFullName"), TextBox)

        selectedAdTitle = AdTitle.Text
        enteredAdFullName = AdFullName.Text

        cmd.Parameters("@AdTitle").Value = selectedAdTitle
        cmd.Parameters("@AdFullName").Value = enteredAdFullName

        SQL = ""
        SQL = SQL & "INSERT INTO InsuredPersons (TransactionID,Title,FullName) VALUES ("
        SQL = SQL & "@TransactionID,"
        SQL = SQL & "@AdTitle,"
        SQL = SQL & "@AdFullName"
        SQL = SQL & ")"

        cmd.CommandText = SQL
        cmd.Connection = db
        cmd.ExecuteNonQuery()
    Next

adtitle과 adfullname은 값을 가로 질러 가져 오지 않는 것 같습니다. 오류가 없으므로 컨트롤을 찾았습니다. 아래는 ASPX 파일 코드입니다.

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate>
        <asp:DropDownList ID="AdTitle" runat="server">
            <asp:ListItem Selected="True" Value="" Text=""/>
            <asp:ListItem Selected="False" Value="Miss" Text="Miss"/>
            <asp:ListItem Selected="False" Value="Ms" Text="Ms"/>
            <asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/>
            <asp:ListItem Selected="False" Value="Mr" Text="Mr"/>
            <asp:ListItem Selected="False" Value="Other" Text="Other"/>
        </asp:DropDownList>

       <asp:TextBox ID="AdFullName" runat="server"></asp:TextBox>
   </ItemTemplate>

편집하다:

리피터는 페이지로드에 구성됩니다

    Dim repeatTimes((TotalAdInsured - 1)) As Integer

    myRepeater.DataSource = repeatTimes
    myRepeater.DataBind()

직접 캐스트는 버튼 클릭으로 수행됩니다

Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click

답변 : 리피터 건설 주위에 Ispostback을 넣어야했습니다.

If Not IsPostBack() Then

        Dim repeatTimes((TotalAdInsured - 1)) As Integer

        myRepeater.DataSource = repeatTimes
        myRepeater.DataBind()

    End If
도움이 되었습니까?

해결책

먼저 당신이 원한다고 생각합니다.

myDropDown.SelectedItem.Text

보다는

myDropDown.Text

또한 왜 두 개의 itemtemplates가 있습니까? 당신이 그렇게 할 수 있을지 몰랐어요 ...

페이지 라이프 사이클 동안 다른 지점에서 텍스트 상자 또는 드롭 다운과 상호 작용하고 있습니까?

리피터 데이터 밴드 주위에 포스트 백 확인을 해보십시오. 무슨 일이 일어나고 있는지 생각합니다. 컨트롤을 동적으로로드하는 것이므로 뷰 스테이트가 없으므로 값은 항상 비어 있습니다.

다른 팁

페이지 수명주기의 올바른 지점에서 코드를 실행하고 있는지 확인하십시오. 너무 일찍하고 있다면 (예 : Oninit에서) 클라이언트의 값은 아직 없습니다. oncommand ()/onsubmit () 이벤트로 옮기고 어떤 일이 일어나는지 확인하십시오. ASP.NET 페이지 수명주기에 대한 몇 가지 참조는 다음과 같습니다.

  1. http://msdn.microsoft.com/en-us/library/ms178472.aspx
  2. http://www.15seconds.com/issue/020102.htm
  3. http://www.beansoftware.com/asp.net-tutorials/page-life-cycle.aspx
  4. ASP.NET 페이지 수명주기의 그림
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top