如何从C#代码隐藏到ASPX页面显示数组?

时间:2015-07-29 19:55:41

标签: c# asp.net arrays loops

我有一系列调查回复,名为"答案"。
string[] answers = new string[10] {"Y", "Y", "N", "Y", "N", "Y", "N", "Y", "N", "Y"};

我知道如果我为每个索引创建一个新字符串,如下所示:
string answer1 = answers[0]

我可以把<%= answer1%>在HTML / ASPX页面中,它将显示" 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>

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

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

像(伪代码)一样的东西

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

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

4 个答案:

答案 0 :(得分:4)

将它放入* .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>

然后把它放到代码隐藏中:

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

如果真的想要,你可以把它放到你的标记中:

<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>

但我不推荐第二种选择。如果它吸引你,请尝试学习Razor syntax,甚至使用ASP.Net MVC而不是Web Forms。

答案 1 :(得分:2)

我考虑使用转发器。我不会在页面加载或任何东西上绑定它,但这是一个例子。将数据和绑定移动到用于获取数据的任何事件。

<asp:Repeater runat="server" ID="repeat" OnItemDataBound="repeat_ItemDataBound">
    <ItemTemplate>
        <asp:Label ID="lbl" runat="server" />
    </ItemTemplate>
</asp:Repeater>

    public partial class _Default : Page
    {
        int count = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] answers = new string[10] { "Y", "Y", "N", "Y", "N", "Y", "N", "Y", "N", "Y" };
            repeat.DataSource = answers;
            repeat.DataBind();
        }

    protected void repeat_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        count++;
        var lbl = e.Item.FindControl("lbl") as Label;

        lbl.Text = string.Format("Question {0} <br />{1}<br />",count.ToString(), e.Item.DataItem.ToString());
    }
}

count变量是在网页中声明的简单整数。

答案 2 :(得分:1)

我会添加runat =&#34; server&#34;到表中,然后你可以在C#循环中添加每个表行的问题编号和答案。

<body>
    <div class="container">
        <asp:Panel ID="pnlResults1" runat="server">
            <div class="section z-depth-2 blue-grey lighten-5">
                <table runat="server" ID="tblResults" style="width: 25%" align="center">

                </table>
            </div>
        </asp:Panel>
    </div>

foreach (var answer in answers)
    addRow(questionNumber, answer)

private void addRow(questionNumber, answer)
{
    //build your table row and add to table
}

答案 3 :(得分:1)

我会创建一个包含答案的字符串列表,而不是为每个答案创建一个新变量。

List<String> lstOfAnswers = new List<String>();
lstOfAnswers.Add(...);

或者您可以考虑一个词典,其中Key是问题的编号,而Value是答案。

Dictionary<int, string> dictOfAnswers = new Dictionary<int, string>();
dictOfAnswers.Add(Key,Value);

在你的页面(html)中,你可以使用foreach命令like this

遍历List或Dictionary

希望它有所帮助。