2016-02-19 4 views
0

я следующее:Как сортировать на якорь ссылки заголовка внутри строки строителя

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < contentList.Count;i++) 
{ 
    sb.Append("<div class=\"justPad\">"); 
    sb.Append("<a class=\"defaultLinks\" "); 
    sb.Append("href=" + contentList[i].Quicklink + " "); 
    sb.Append("title=" + contentList[i].Title + ">" + contentList[i].Title + "</a>"); 
    sb.Append("</div>"); 
} 
Label2.Text = sb.ToString(); 

Результат:

<span id="ctl00_BodyPlaceHolder_Label2"> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3198" title="Hammond, John">Hammond, John</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3205" title="Beezer, Michelle">Beezer, Michelle</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3208" title="Tops, John">Tops, John</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3209" title="Kew, Lauren">Kew, Lauren</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=352" title="Perez, Lance">Perez, Lance</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=353" title="Powell, French">Powell, French</a></div> 
</span> 

Как вы можете видеть, что порядок отображения не сортируется.

Как можно сортировать StringBuilder, основанный на contentList[i].Title так конечный результат:

<span id="ctl00_BodyPlaceHolder_Label2"> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3205" title="Beezer, Michelle">Beezer, Michelle</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3198" title="Hammond, John">Hammond, John</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3209" title="Kew, Lauren">Kew, Lauren</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=352" title="Perez, Lance">Perez, Lance</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=353" title="Powell, French">Powell, French</a></div> 
    <div class="justPad"><a class="defaultLinks" href="/pro.aspx?id=3208" title="Tops, John">Tops, John</a></div> 
</span> 
+0

Почему не ваш 'сортировать почту перед отправкой на почтамт contentList' перед созданием строки якоря? – ryanyuyu

+0

Я использую Ektron для извлечения содержимого в коллекции и добавления его в StringBuilder – Si8

ответ

1

Это просто - список сортировки контента перед тем список ссылок строительства:

foreach (var content in contentList.OrderBy(c => c.Title)) 
{ 
    sb.Append("<div class=\"justPad\">"); 
    sb.Append("<a class=\"defaultLinks\" "); 
    sb.Append("href=\"" + content.Quicklink + "\" "); 
    sb.Append("title=\"" + content.Title + "\">" + content.Title + "</a>"); 
    sb.Append("</div>"); 
} 

Рассмотрим также с помощью interpolated strings сделать ваш код более доступен для чтения:

sb.Append($"<a class='defaultLinks' href='{content.Quicklink}' title='{content.Title}'>"); 

Примечание: рассмотрите использование HtmlTextWriter, если вы создаете некоторый html. Вы можете написать в строку (как и с StringBuilder) или непосредственно к какому-либо другому TextWriter, чтобы не создавать большую в памяти строки:

// using System.Web.UI 

StringWriter stringWriter = new StringWriter(); 
using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter)) 
{ 
    writer.AddAttribute(HtmlTextWriterAttribute.Id, "ctl00_BodyPlaceHolder_Label2"); 
    writer.RenderBeginTag(HtmlTextWriterTag.Span); 

    foreach (var content in contentList.OrderBy(c => c.Title)) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Class, "justPad"); 
     writer.RenderBeginTag(HtmlTextWriterTag.Div); 

     writer.AddAttribute(HtmlTextWriterAttribute.Class, "defaultLinks"); 
     writer.AddAttribute(HtmlTextWriterAttribute.Href, content.Quicklink); 
     writer.AddAttribute(HtmlTextWriterAttribute.Title, content.Title); 
     writer.RenderBeginTag(HtmlTextWriterTag.A); 

     writer.WriteEncodedText(content.Title); 
     writer.RenderEndTag(); 
     writer.RenderEndTag(); 
    } 

    writer.RenderEndTag(); 
} 
+0

Я использую Ektron для заполнения StringBuilder. Я получаю сообщение об ошибке: 'Тип исключения: NullReferenceException Сообщение об исключении: ссылка на объект не установлена ​​в экземпляр объекта.' – Si8

+0

@ SiKni8 какой оператор дает вам это исключение? –

+0

Фактически это было вызвано другой ошибкой. По какой-то причине результат не был отсортирован с обновленным кодом. – Si8