ASP.NET C#foreach只打印列表中的最后一项

时间:2017-04-03 09:29:11

标签: c# asp.net list printing foreach

我希望在单击按钮后显示Literal Control容器中的所有有效链接。但是,只能显示列表中的最后一项。我已经使用for和foreach循环进行测试但仍未成功。

感谢任何帮助。提前谢谢。

这是我的代码:

public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ValidateButton.Click += ValidateButtonHandler;
        }

        private void ValidateButtonHandler(object sender, EventArgs e)
        {
            List<string> validPages = new List<string>();
            validPages.Add("www.google.com");
            validPages.Add("www.yahoo.com");
            validPages.Add("www.facebook.com");

            List<string> invalidPages = new List<string>();
            invalidPages.Add("www.gogle.com");
            invalidPages.Add("www.yaoo.com");
            invalidPages.Add("www.facbook.com");

            for (int i = 0; i < validPages.Count; i++)
            {
                ValidLinksBox.Text = "<br/>" + validPages[i] + "<br/>";
            }

            foreach (string invalidPage in invalidPages)
            {
                InvalidLinksBox.Text = string.Format("<div class=\"alert success\"><p>{0}</p></div>", invalidPage);
            }
        }
    }

这是aspx部分:

<div class="admin-page">
      <h1>Valid Links:</h1>
        <asp:Literal ID="ValidLinksBox" runat="server" />
      <h1>Invalid Links:</h1>
        <asp:Literal ID="InvalidLinksBox" runat="server" />
    <asp:Button ID="ValidateButton" runat="server" CssClass="btn btn-default" Text="Validate links" />
  </div>

结果如下:

验证链接结果

enter image description here

5 个答案:

答案 0 :(得分:1)

替换

ValidLinksBox.Text = "<br/>" + validPages[i] + "<br/>";

ValidLinksBox.Text += "<br/>" + validPages[i] + "<br/>"; // = replaced by +=

附加字符串值 - 目前您每次迭代都会覆盖内容

答案 1 :(得分:1)

您错过了连接运算符。实际上,您在所有迭代中都会再次覆盖字符串n。您可以替换以下内容:

ValidLinksBox.Text = "<br/>" + validPages[i] + "<br/>";

ValidLinksBox.Text += ("<br/>" + validPages[i] + "<br/>");

更好的方法是使用StringBuilder

StringBuilder builder = new StringBuilder();

for (int i = 0; i < validPages.Count; i++)
{
     builder.Append("<br/>");
     builder.Append(validPages[i]);
     builder.Append("<br/>");  
}

ValidLinksBox.Text =  builder.ToString();

builder = new StringBuilder();

foreach (string invalidPage in invalidPages)
{
    builder.Append("<div class=\"alert success\"><p>");
    builder.Append(invalidPage);
    builder.Append("</p></div>");
}

InvalidLinksBox.Text = builder.ToString();

StringBuilder比连接运算符更好,更易读,更快。

答案 2 :(得分:0)

您必须附加文字,否则它将替换所有文字并打印最后文本

您可以执行以下操作,也可以使用StringBuilder附加文字而不是设置InvalidLinksBox的文字

InvalidLinksBox.Text += string.Format("<div class=\"alert success\"><p>{0}</p></div>", invalidPage);

使用StringBuilder它还包含appendformat方法以获取更多信息,请访问该官方链接

StringBuilder str = new StringBuilder();
foreach (string invalidPage in invalidPages)
{
   str.Append(string.Format("<div class=\"alert success\"><p>{0}</p></div>", invalidPage));
}
InvalidLinksBox.Text = str;

答案 3 :(得分:0)

您应该在文本框中附加文字,请尝试以下代码。

        for (int i = 0; i < validPages.Count; i++)
            {
                ValidLinksBox.Text += "<br/>" + validPages[i] + "<br/>";
            }

答案 4 :(得分:0)

你正在用每次迭代替换值,尝试在下一次迭代之前保存值

        StringBuilder sb1= new StringBuilder();
        StringBuilder sb2= new StringBuilder();
        for (int i = 0; i < validPages.Count; i++)
        {
            sb1.Append("<br/>" + validPages[i] + "<br/>");
        }
        ValidLinksBox.Text = sb1.ToString();
        foreach (string invalidPage in invalidPages)
        {
            sb2.Append(string.Format("<div class=\"alert success\"><p>{0}</p></div>", invalidPage));
        }
        ValidLinksBox.Text = sb2.ToString();