如何检索转发器内的表列(ID)的TD值

时间:2013-09-15 13:11:20

标签: c# asp.net repeater

我有一个带有HTML表格布局的转发器,如下所示,它动态地从数据库中填充

<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
    <table border="1">
        <tr>
            <th colspan="2"></th>
        </tr>
</HeaderTemplate>
<ItemTemplate>
    <tr>
        <td><%# DataBinder.Eval(Container.DataItem, "QuestionId") %> <asp:HiddenField ID="hiddenField" Value='<%# DataBinder.Eval(Container.DataItem, "QuestionId") %>' runat="server" /> </td>
        <td>
            <table>
                <tr>
                    <td colspan="4"><%# DataBinder.Eval(Container.DataItem, "Question") %> </td>
                </tr>
                <tr><td><asp:RadioButton ID="op1" runat="server" OnCheckedChange="check_Answer"/></td><td><%# DataBinder.Eval(Container.DataItem, "Answer1") %> </td></tr>
                <tr><td><asp:RadioButton ID="op2" runat="server" OnCheckedChange="check_Answer"/></td><td><%# DataBinder.Eval(Container.DataItem, "Answer2") %> </td></tr>
                <tr><td><asp:RadioButton ID="op3" runat="server" OnCheckedChange="check_Answer"/></td><td><%# DataBinder.Eval(Container.DataItem, "Answer3") %> </td></tr>
                <tr><td><asp:RadioButton ID="op4" runat="server" OnCheckedChange="check_Answer"/></td><td><%# DataBinder.Eval(Container.DataItem, "Answer4") %> </td></tr>
            </table>
        </td>
    </tr>
</ItemTemplate>
<FooterTemplate>
    </table>
</FooterTemplate>

在代码背后

protected void check_Answer(object sender, EventArgs e)
    {
        RepeaterItem item = (sender as RadioButton).Parent as RepeaterItem;
        HiddenField hiddenField = item.FindControl("hiddenField") as HiddenField;

        String questionId = hiddenField.Value;
        Session["test"] = questionId;/*Just added to a session and passed to test page*/
        Response.Redirect("test.aspx");/*This Page Displays the value of Session["test"]*/
    }

现在我需要做的是OnCheckedChange事件,它调用代码隐藏方法的单选按钮,但应该将QuestionID值传递给方法。请建议我检索包含“QuestionID”的值的方法。有关详细信息,真实界面如下所示, enter image description here

2 个答案:

答案 0 :(得分:3)

您可以将选项按钮分组,并将questionid用作组名称的一部分。在代码中,您可以从GroupName获取questionid。所以你真的不需要任何隐藏的领域。您的标记可能如下所示:

<asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate>
        <table border="1">
            <tr>
                <th colspan="2"></th>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><%# DataBinder.Eval(Container.DataItem, "QuestionId") %> </td>
            <td>
                <table>
                    <tr>
                        <td colspan="4"><%# DataBinder.Eval(Container.DataItem, "Question") %> </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:RadioButton ID="RadioButton1" runat="server" AutoPostBack="true" Text='<%# DataBinder.Eval(Container.DataItem, "Answer1") %>' 
                                OnCheckedChanged="check_Answer" GroupName='<%# Eval("QuestionId","Grp_{0}") %>'  />                       
                        </td>
                        <td><asp:RadioButton ID="RadioButton2" runat="server" AutoPostBack="true" Text='<%# DataBinder.Eval(Container.DataItem, "Answer2") %>'  
                            OnCheckedChanged="check_Answer" GroupName='<%# Eval("QuestionId","Grp_{0}") %>'  />                        
                        </td>
                        <td><asp:RadioButton ID="RadioButton3" runat="server" AutoPostBack="true" Text='<%# DataBinder.Eval(Container.DataItem, "Answer3") %>'  
                            OnCheckedChanged="check_Answer" GroupName='<%# Eval("QuestionId","Grp_{0}") %>' />
                        </td>
                        <td><asp:RadioButton ID="RadioButton4" runat="server" AutoPostBack="true"  Text='<%# DataBinder.Eval(Container.DataItem, "Answer4") %>'  
                            OnCheckedChanged="check_Answer" GroupName='<%# Eval("QuestionId","Grp_{0}") %>' />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

在代码中:

protected void check_Answer(object sender, EventArgs e)
{
    string grpId = ((RadioButton)sender).GroupName;
    string  questionId = grpId.Split('_')[1].ToString();

    Session["test"] = questionId;/*Just added to a session and passed to test page*/
    Response.Redirect("test.aspx");/*This Page Displays the value of Session["test"]*/
}

答案 1 :(得分:1)

我会在下面添加隐藏字段

<asp:HiddenField ID="hiddenField" Value='<%# DataBinder.Eval(Container.DataItem, "QuestionId") %>' runat="server" />

在您的check_Answer活动中

RepeaterItem item = (sender as RadioButton).Parent as RepeaterItem;
HiddenField hiddenField = item.FindControl("hiddenField") as HiddenField;

string questionId= hiddenField.Value;