我希望在单击按钮后显示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>
结果如下:
验证链接结果
答案 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();