2011-04-07 85 views
1

我正在構建一個允許用戶創建和進行測試的ASP.NET網站。測試可以包含各種類型的問題(多選題,真/假,散文等)。由於測試的動態性,我正在使用中繼器創建「測試」頁面。如何從動態創建的表單獲取用戶輸入

我現在的問題是:我怎樣才能得到用戶的答案?對於固定數量/類型的問題,這很簡單,但我不確定如何從具有動態創建的ID的項目中獲取答案,或者如何將可變數量的答案傳回給我的數據庫。

編輯: 我發現我的答案here.

回答

1

可以使用的Request.Form

但這裏是使用的FindControl和Repeater另一種方法:

For Each item As RepeaterItem In Me.RptItems.Items 

     Dim value = CType(item.FindControl("TxtName"), TextBox).Text 

    Next 

您可以使用FindControl方法,每個的RepeaterItem並找到ID裏面所需的控制。

ASPX文件:

<asp:Repeater ID="RptItems" runat="server"> 
    <HeaderTemplate> 
     <table> 
      <tr> 
       <td> 
        Name 
       </td> 
      </tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td> 
       <asp:TextBox ID="TxtName" runat="server" Text='<%# Eval("Name")%>'></asp:TextBox> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 
+0

我基本上這樣做,但稍有不同。我需要一個帶有文本框的隱藏字段,並使用C#。謝謝您的幫助! – 2011-04-09 04:22:19

0

如果您正在使用Asp.Net MVC可以參考這篇文章。 Model Bind To Collection

如果它的表單可以隨時訪問通過Request.Form集合提交的每個輸入。

0

以下是我最後做的每一個題型的基礎上,鏈接,包括this one

foreach (RepeaterItem item in myRptr.Items) 
     { 
      if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) 
      { 
       OracleCommand cmd = new OracleCommand(); 
       cmd.Connection = conn; 
       cmd.CommandText = "myPackage.myProcedure"; 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.Parameters.Add("user_id", OracleType.VarChar).Value = Session["UserId"].ToString(); 
       cmd.Parameters.Add("question_id", OracleType.Number).Value = ((HiddenField)item.FindControl("myHidden")).Value; 
       cmd.Parameters.Add("answer", OracleType.VarChar).Value = ((TextBox)item.FindControl("myTxt")).Text; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
+0

這正是我所說的。你可以在你的網格中使用你需要的任何控件(HiddenField,TextBox,DropDown,...),並通過循環中繼器項目來獲取它的值。 – 2011-04-09 09:06:53

相關問題