【问题标题】:How to get values from HTML radio buttons inside a repeater?如何从转发器内的 HTML 单选按钮获取值?
【发布时间】:2011-12-02 12:07:51
【问题描述】:

我有一个简单的问卷系统,它从我的数据库中的某个总数中向用户显示随机数量的问题。

我有 2 个单独的表:QuestionsAlternatives(这是要回答的选项)与两个表中的 QuestionID 字段相关。我使用 Nested RepeatersparentRepeater 表示问题,childRepeater 表示选项)呈现此类问卷,并且它在页面上正确显示。

每个选项都是一个单选按钮,我不得不将其用作 HTML,而不是 标准服务器控件 <asp:RadioButton>,因为转发器内部存在动态 ID 问题。

所以我的.aspx 代码是这样的:

<asp:Repeater ID="rptQuestoes" runat="server">
                    <HeaderTemplate>
                        <form method="get">
                        <ol class="orderedList">
                    </HeaderTemplate>

                    <ItemTemplate>
                        <li>
                            <%#DataBinder.Eval(Container.DataItem, "QuestionName")%>
                            <asp:Repeater ID="rptAlternativas" DataSource='<%# Container.DataItem.Row.GetChildRows("Questionario") %>' runat="server">
                                <HeaderTemplate>
                                    <ul style="list-style-type: none">
                                </HeaderTemplate>

                                <ItemTemplate>
                                    <li>
                                        <input id="<%#Container.DataItem("AlternativeID")%>" type="radio" runat="server" name="<%#Container.DataItem("QuestionID")%>" value="<%#Container.DataItem("AlternativeID")%>" /><%#Container.DataItem("AlternativeName")%>
                                    </li>
                                </ItemTemplate>

                                <FooterTemplate>
                                    </ul>
                                </FooterTemplate>
                            </asp:Repeater>
                        </li>
                    </ItemTemplate>

                    <FooterTemplate>
                        </ol>
                        </form>
                    </FooterTemplate>
                </asp:Repeater>

我不知道的是,鉴于我不知道 QuestionIDs 和 AlternativeIDs,因为它是随机生成并使用 HTML input,因此我如何获得用户回答的所有问题标签?

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    您需要通过 Request.Form["nameoftheRadioButtonYouWant"]; 访问它们

    我不知道您的中继器会发出什么,但使用这种结构:

    <input type="radio" value="someRadio" name="A" />
    <input type="radio" value="hello" name="A" />
    <input type="radio" value="world" name="A" />
    

    检查中间无线电会为此代码生成“Hello”:

    string aVal = Request.Form["A"];
    

    因此,从您的代码看来,您将遍历所有问题,并找到用户从中选择的答案

    string answer = Request.Form[QuesId.ToString()]; //don't forget the ToString()!
    

    由于您为单选按钮提供了 questionid 的名称

    <input ... type="radio" name="<%#Container.DataItem("QuestionID")%>" 
    

    【讨论】:

    • 很好,但我是否需要 &lt;form&gt; 标记或任何特殊的标记,如 HeaderTemplate 中所示?使用此标签,处理它的按钮不起作用
    • 哦,我没注意到。是的,你肯定想去掉标题中的那个表单标签。只需让所有内容都成为页面主表单的一部分,当您回帖时,您可以读取 Request.Form 中的所有值
    • 如果我不知道要恢复的QuestionIDs 怎么办(因为它是随机生成的)?如何循环遍历每个 input radio?有没有可以在我的中继器中使用的索引器?谢谢
    • @Rodrigo - 我不认为你可以遍历代码中的每个输入无线电。我认为你必须找到一种方法让这些问题 ID 不是随机的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多