2017-04-03 12 views
-2

ボタンをクリックした後、すべての有効なリンクをLiteral Controlコンテナに表示したいと思います。ただし、リスト内の最後の項目のみが表示されます。私はforとforeachループの両方をテストに使用していますが、まだ成功していません。ASP.NET C#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

0を引き起こします

答えて

1

連結演算子が見つかりませんでした。実際には、すべての反復で文字列をもう一度上書きしています。あなたは以下のように置き換えることができます。

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/>"; // = replaced by += 

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

を交換 - 現在、あなたはコンテンツにあなたがテキストを追加する必要があり、各反復

0

を上書きしているそれ以外の場合は、すべてのテキストを置き換えます最後のテキストを印刷する

以下のようにするか、StringBuilderテキストを追加し、セットよりもするInvalidLinksBoxのテキストStringBuilderを使用して

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

それは、あなたがテキストボックスにテキストを追加する必要があり、その公式リンク

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

に行くより多くの情報のためだけでなくappendformat方法が含まれています以下のコードを試してください。

 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(); 
を来る前に値を保存しよう
関連する問題