我正在構建一個允許用戶創建和進行測試的ASP.NET網站。測試可以包含各種類型的問題(多選題,真/假,散文等)。由於測試的動態性,我正在使用中繼器創建「測試」頁面。如何從動態創建的表單獲取用戶輸入
我現在的問題是:我怎樣才能得到用戶的答案?對於固定數量/類型的問題,這很簡單,但我不確定如何從具有動態創建的ID的項目中獲取答案,或者如何將可變數量的答案傳回給我的數據庫。
編輯: 我發現我的答案here.
我正在構建一個允許用戶創建和進行測試的ASP.NET網站。測試可以包含各種類型的問題(多選題,真/假,散文等)。由於測試的動態性,我正在使用中繼器創建「測試」頁面。如何從動態創建的表單獲取用戶輸入
我現在的問題是:我怎樣才能得到用戶的答案?對於固定數量/類型的問題,這很簡單,但我不確定如何從具有動態創建的ID的項目中獲取答案,或者如何將可變數量的答案傳回給我的數據庫。
編輯: 我發現我的答案here.
可以使用的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>
如果您正在使用Asp.Net MVC可以參考這篇文章。 Model Bind To Collection
如果它的表單可以隨時訪問通過Request.Form集合提交的每個輸入。
以下是我最後做的每一個題型的基礎上,鏈接,包括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();
}
}
這正是我所說的。你可以在你的網格中使用你需要的任何控件(HiddenField,TextBox,DropDown,...),並通過循環中繼器項目來獲取它的值。 – 2011-04-09 09:06:53
我基本上這樣做,但稍有不同。我需要一個帶有文本框的隱藏字段,並使用C#。謝謝您的幫助! – 2011-04-09 04:22:19