2009-05-31 17 views
0

iveにはこの問題に関するいくつかの質問がありましたが、まだ問題があります。ASP.NETリピーターコントロール内のDropDownの値を調べるパートII

リピーターコントロール内のいくつかのドロップダウンとテキストボックスコントロールから値を探したいと思います。

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() 

DirectCastは、ボタン上で行われ

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

回答をクリックしてください:周りにIsPostBackプロパティ入れていましたRエポーター建設。

If Not IsPostBack() Then 

     Dim repeatTimes((TotalAdInsured - 1)) As Integer 

     myRepeater.DataSource = repeatTimes 
     myRepeater.DataBind() 

    End If 
+1

@マーク:が2回問題(誤植)になります。また、リピータやページに接続されているイベントを提供できますか? –

+0

こんにちはKb、iveさんが上記の質問を更新しました。 –

答えて

1

まず第一には、私はあなたがしたいと思う:

myDropDown.SelectedItem.Text 

むしろ

myDropDown.Text 

なぜ2つのItemTemplatesを持っていますか?私もあなたがそれを行うことができるかどうかはわかりませんでした...

ページライフサイクルの他のポイントで、TextBoxまたはDropDownsと対話していますか?

リピータのデータバインディングの前後にPostBackチェックを入れてみてください。私は何が起こっていると思うあなたのコントロールを動的にロードするので、彼らはviewstateがないので、値は常に空です。

+0

ちょうどそれが繰り返されていることを強調する2つがあります。私のコードでは1つしかありません。ごめんなさい。 –

+1

myDropDown.SelectedTextまたはmyDropDownを実行することもできます。値のためのSelectedValue – Jason

+0

テキストボックスの値は、どちらも通過していないので、私は理由は確かです。 –

0

コードがページライフサイクルの正しい時点で実行されていることを確認してください。あなたがあまりに早く(例えば、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. Picture of asp.net page life cycle
+0

こんにちはAdam、コードはボタンクリックで実行されています。 TransactionIDは、リピータ制御の上の隠しフィールドから取得され、dbテーブルに挿入されます。値が合格したことを検証するために何かできることはありますか? –

関連する問題