2017-04-03 59 views
-2

我想在单击按钮后在Literal Control容器中显示所有有效链接。但是,只能显示列表中的最后一项。我已经使用for和foreach循环进行测试,但仍不成功。ASP.NET C#仅在列表中打印最后一个项目

任何帮助表示赞赏。提前致谢。

这里是我的代码:

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

回答

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比连接运算符更好,更具可读性和速度更快。

1

更换

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

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

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

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

你应该追加文本在文本框中,请尝试下面的代码。

 for (int i = 0; i < validPages.Count; i++) 
      { 
       ValidLinksBox.Text += "<br/>" + validPages[i] + "<br/>"; 
      } 
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(); 
相关问题