【问题标题】:TextBox inside a repeater control中继器控件内的文本框
【发布时间】:2013-08-28 01:50:39
【问题描述】:

我有一个带有ItemTemplate 的转发器控件,其中包含两个文本框。我遍历中继器并将数据插入到我的数据库中。问题是第一个 TextBox 是唯一插入的。

我在PageLoad方法中绑定了List中的第一个TextBox。

<asp:Repeater ID="questionRepeater" ViewStateMode="Enabled" runat="server">
    <ItemTemplate>
        <tr class="">
            <td>
                <div class="control-group">
                    <label class="control-label">Queston  : </label>

                    <div class="controls">
                        <asp:TextBox runat="server" ID="txtQ" Text='<%#Eval("Question") %>' ReadOnly="true" CssClass="span8">
                        </asp:TextBox>
                    </div>
                </div>
            </td>
        </tr>
        <tr class="info">
            <td>
                <div class="control-group">
                    <label class="control-label">Answer : </label>
                    <div class="controls">
                        <asp:TextBox runat="server" ID="txtAns"
                            Height="150" TextMode="MultiLine" CssClass="span8"></asp:TextBox>

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

我的代码在后面:

protected void btnSave_Click(object sender, EventArgs e)
{
    Sessions session = new Sessions();
    SessionQuestion sessionQuestions = new SessionQuestion();

    session.ClientId = id;
    session.DateTime = DateTime.Now;
    session.Report = txtReport.Text;
    session.Notes = string.Empty;
    session.IsActive = IsActive.Active;

    int sessionId = SessionBLL.Insert(session);

    foreach (Control item in questionRepeater.Items)
    {
        sessionQuestions.SessionId = sessionId;


        TextBox txtQ = (TextBox)item.FindControl("txtQ");
        sessionQuestions.Answer = "";
        sessionQuestions.Question = txtQ.Text;

        var txtAns = (TextBox)item.FindControl("txtAns") as TextBox;
        if (txtAns != null)
        {
            sessionQuestions.Answer = "";
            sessionQuestions.Answer = txtAns.Text; 
        }


        Thread.Sleep(150);
        if (txtAns != null && txtQ.Text != null)
        {
            SessionQuestionBLL.Insert(sessionQuestions);
        }
    }

    string message = "";

    Response.Redirect("/Sessions/Sessions.aspx?message=" + message);
}

【问题讨论】:

    标签: asp.net sql controls repeater


    【解决方案1】:

    可能是因为您没有在 Page_Load 中包含转发器数据绑定

    If (!IsPostBack)
    {
        // Databind your repeater
    }
    

    此外,当您遍历中继器时,最好遍历 item & Alternative 类型的项目,如下所示

    foreach (RepeaterItem item in questionRepeater.Items)
    {
        if (item.ItemType == ListItemType.Item || 
            item.ItemType == ListItemType.AlternatingItem)
        {
        }
    }
    

    【讨论】:

    • :D 1 天后我忘记了 !isPostBack :* 谢谢人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多