【问题标题】:ASP.NET C# foreach only print last item in listASP.NET C# foreach 仅打印列表中的最后一项
【发布时间】:2017-08-28 02:34:57
【问题描述】:

单击按钮后,我想在文字控件容器中显示所有有效链接。但是,只能显示列表中的最后一项。我已经使用 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>

这是结果:

验证链接结果

【问题讨论】:

    标签: c# asp.net list printing foreach


    【解决方案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】:

      替换

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

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

      附加一个字符串值 - 目前您正在覆盖每次迭代的内容

      【讨论】:

        【解决方案3】:

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

        您可以执行以下操作,也可以使用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;
        

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            您正在用每次迭代替换值,尝试在下一次迭代到来之前保存该值

                    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();
            

            【讨论】:

              猜你喜欢
              • 2021-11-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-02-15
              相关资源
              最近更新 更多