如何显示从C#代码背后的数组到ASPX页面?

Vin*_*ong 1 c# asp.net arrays loops

我有一个名为“答案”的调查问卷响应的字符串数组。
string[] answers = new string[10] {"Y", "Y", "N", "Y", "N", "Y", "N", "Y", "N", "Y"};

我知道如果我为每个索引创建一个新的字符串,像这样:
string answer1 = answers[0]

我可以在HTML / ASPX页中放入<%= answer1%>,它会按原样显示“ Y”。但是,我的数组最多可以包含50个项目(尽管项目的数量不会改变)。

一种方法是创建50个变量并分别引用它们,但说实话。

这是我的<body>;)(或至少我想要的样子)。

<body>
<div class="container">
    <asp:Panel ID="pnlResults1" runat="server">
        <div class="section z-depth-2 blue-grey lighten-5">
            <table style="width: 25%" align="center">
                <tr>
                    <td><b>Question 1:</b></td>
                    <td><%=answer1%></td>
                </tr>
                <tr>
                    <td><b>Question 2</b></td>
                    <td><%=answer2%></td>
                </tr>
                <tr>
                    <td><b>Question 3</b></td>
                    <td><%=question3%></td>
                </tr>
                <tr>
                    <td><b>Question 4</b></td>
                    <td><%=question4%></td>
                </tr>
                <tr>
                    <td><b>Question 5</b></td>
                    <td><%=question5%></td>
                </tr>
                <tr>
                    <td><b>Question 6</b></td>
                    <td><%=question6%></td>
                </tr>
            </table>
        </div>
    </asp:Panel>
</div>
Run Code Online (Sandbox Code Playgroud)

..和表行将继续计数。基本上,我想在一个表中显示我的50多个调查响应,而不必为每个数组索引创建一个字符串。

我当时在考虑为html / aspx中的答案创建文本框,并使用foreach循环遍历每个答案,并在遍历Answers []时添加答案,但是我不确定如何遍历答案。

类似于(伪代码)

int counter = 0;
foreach(Control c in Panel){
     if(c is Text) 
        Text.setText(answers[counter]);
        counter++;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。谢谢!

Joe*_*orn 5

将其放入您的* .aspx文件:

<div class="container">
<div class="section z-depth-2 blue-grey lighten-5">
    <asp:Repeater ID="rptResults1" runat="server">
        <HeaderTemplate><table style="width: 25%" align="center"></HeaderTemplate>
        <ItemTemplate>
        <tr>
            <td><strong>Question <%# Container.ItemIndex + 1 %>:</strong></td>
            <td><%# Container.DataItem %></td>
        </tr>
        </ItemTemplate>
        <FooterTemplate></table></FooterTemplate>
    </asp:Repeater>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后将其放入您的代码隐藏中:

string[] answers = new string[10] {"Y", "Y", "N", "Y", "N", "Y", "N", "Y", "N", "Y"};
rptResults1.DataSource = answers;
rptResults1.DataBind();
Run Code Online (Sandbox Code Playgroud)

如果确实需要,可以将其放入标记中:

<div class="container">
    <div class="section z-depth-2 blue-grey lighten-5">
        <table style="width: 25%" align="center">
    <%
     string[] answers = new string[10] {"Y", "Y", "N", "Y", "N", "Y", "N", "Y", "N", "Y"};
     string rowTemplate = "<tr><td><b>Question {0}:</b></td><td>{1}</td></tr>\n";
     for (int i = 0; i<answers.Length;i++)
     {
        Response.Write(string.Format(rowTemplate, i+1, answers[i]));
     }
    %>
        </table>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

不过,我不建议第二种选择。如果您喜欢,可以尝试了解Razor语法,甚至可以使用ASP.Net MVC而不是Web Forms。