0

私の質問にはすでに多くの回答がありますが、問題は、そこには「すっごく」多くの悪い回答があり、どの回答が私を助けるのかを理解するには天才でなければならないということです. 要点に行きましょう。私の問題は単純です、私repeaterは2つを含むtextboxes

txtQuestion
txtAnswer

私はバインドメソッドを持っています

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

にバインドするための私の質問が含まれていtxtQuestionます。

約17の質問(バジンガ!!)。の質問に答えてtxtAnswer 、ボタンを押してデータベースに保存したいと思います。私はアーキテクチャを使用しているので、17 のデータを保存してテーブルにプッシュするmulti-tier最も重要な方法が必要です。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

3 に答える 3

0

あなたの最善の策は、jquery+PageMethods を使用することです。たとえば、このようなクラスがあります

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

.cs コードで、次のような PageMethods を作成します。

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

.aspx を次のように変更します。

<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>
于 2013-10-09T18:59:14.857 に答える
0

きれいな答えはありませんが、ajax ルートに進むか、リピーターからのコマンド引数への応答について詳しく説明しているこの記事に従うことができます。

http://www.webcodeexpert.com/2013/04/how-to-bind-edit-update-and-delete-data.html#.Uhlq3VTD-t8

于 2013-08-25T02:28:22.677 に答える