2013-08-24 49 views
0

我的問題已經有很多的答案,但問題是有「sooo」很多不好的答案,我必須是一個天才,找出什麼答案會幫助我。 讓我們明白了。 我的問題很簡單,我有一個repeater包括兩個textboxes從中繼器插入數據到數據庫

txtQuestion 
txtAnswer 

我有

List<SessionQuestion> questions = new List<SessionQuestion>(); 

綁定方法,包含我的問題,將它們綁定到txtQuestion

約17個問題(Bazinga !!)。 所以我想回答txtAnswer 中的問題,並按下按鈕將其保存到數據庫。 我使用multi-tier體系結構,所以我想最重要的方式來保存從我的17 textbox的數據推入我的表。 我的表有這樣的結構。

[SessionQuestionId] [SessionId] [Question] [Answer]. 

我的代碼片段:

<table class="table responsive"> 
        <tbody> 
         <asp:Repeater ID="questionRepeater" runat="server"> 
          <ItemTemplate> 
            <tr class=""> 
          <td> 
           <div class="control-group"> 
            <label class="control-label">Queston <asp:Literal id="liteQuestionNum" runat="server" ></asp:Literal> : </label> 

            <div class="controls"> 
             <asp:TextBox runat="server" ID="txtQ" Text='<%#Eval("Question") %>' ReadOnly="true" CssClass="span8"> 
             </asp:TextBox> 
            </div> 
           </div> 

           <hr /> 
           <div class="control-group"> 
            <label class="control-label">Answer <asp:Literal id="liteAnserNum" runat="server" ></asp:Literal> : </label> 
            <div class="controls"> 

             <asp:TextBox ID="txtAns" runat="server" CssClass="span8" TextMode="MultiLine"> 

             </asp:TextBox> 
            </div> 
           </div> 
          </td> 
         </tr> 
          </ItemTemplate> 
         </asp:Repeater> 
        </tbody> 
       </table> 

我後面的代碼片段:

private void BindRepeater() 
{ 
    List<SessionQuestion> questions = new List<SessionQuestion>(); 
    questions.Add(new SessionQuestion { Question = "Question 1 etc.."}); 
    questions.Add(new SessionQuestion { Question = "Question 2 etc.."}); 
. 
. 
. 
. 
    questionRepeater.DataSource = questions; 
    questionRepeater.DataBind(); 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 

} 

在此先感謝。

回答

4

你可以試試這個,我只是顯示方式從中繼器獲取價值,您可以根據需要進一步修改它。

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem item in questionRepeater.Items) 
    { 
     TextBox Qbox = item.FindControl("txtQ") as TextBox; 
     TextBox Ansbox = item.FindControl("txtAns") as TextBox; 
     string Question = Qbox.Text; 
     string Answer = Ansbox.Text; 

     if (!string.IsNullOrEmpty(Answer)) 
     { 
      //Perform your insert operation. 
     } 
    } 
    //Bind Repeater again if required 
} 
+0

,我用了:

[WebMethod] public static void SaveAnswers(QuestionAnswer[] answers) { .... } 

如下更改您的.aspx解決方案,因爲我問了這個問題,我搜索了另一個重要的答案,但這似乎是現在最好的答案,謝謝 – ahmgeek

0

最好的辦法是使用jquery + PageMethods。 例如有這樣

public class QuestionAnswer 
{ 
string txtQuestion{get;set;} 
string txtAnswer{get;set;} 
} 

在您的.cs代碼的類創建PageMethods喜歡如下:

<table class="table responsive"> 
        <tbody> 
         <asp:Repeater ID="questionRepeater" runat="server"> 
          <ItemTemplate> 
            <tr class=""> 
          <td> 
           <div class="control-group"> 
            <label class="control-label">Queston <asp:Literal id="liteQuestionNum" runat="server" ></asp:Literal> : </label> 

            <div class="controls"> 
             <asp:TextBox runat="server" ID="txtQ" Text='<%#Eval("Question") %>' ReadOnly="true" CssClass="span8 question"> 
             </asp:TextBox> 
            </div> 
           </div> 

           <hr /> 
           <div class="control-group"> 
            <label class="control-label">Answer <asp:Literal id="liteAnserNum" runat="server" ></asp:Literal> : </label> 
            <div class="controls"> 

             <asp:TextBox ID="txtAns" runat="server" CssClass="span8 answer" TextMode="MultiLine"> 

             </asp:TextBox> 
            </div> 
           </div> 
          </td> 
         </tr> 
          </ItemTemplate> 
         </asp:Repeater> 
        </tbody> 

    ..... 
don't forget to reference jquery 
... 
<script> 
$('#<%=btnSave.ClientId%>').click(function(){ 
    var answers = []; 
    $('.responsive tbody tr').each(function(){ 
    answers.push({ 
     txtQuestion:$('td .question').val(), 
     txtAnswer:$('td .answer').val() 
    }); 
    }); 

    PageMethods.SaveAnswers(answers); 
    return false; 
}); 
</script>