2010-06-25 3 views
0

Быстрый вопрос.Как бы вы реорганизовали этот помощник ASP.NET MVC 2 Html?

Как бы вы реорганизовали этот Asp.net MVC 2 HtmlHelper? В частности, имеет смысл использовать класс TagBuilder в этом сценарии?

 public static MvcHtmlString BusinessDisplayContacts(this HtmlHelper helper, string phone, string cellPhone, 
     string fax, string website, string email, bool hideEmail) 
    { 
     StringBuilder sb = new StringBuilder(); 

     sb.AppendLine("<ul>"); 
     if (!string.IsNullOrEmpty(phone)) { 
      sb.AppendLine("<li class=\"tel\">"); 
      sb.AppendLine("<span class=\"type\">Work</span>:"); 
      sb.AppendFormat("<span class=\"value\">{0}</span>",phone);    
      sb.AppendLine("</li>"); 
     } 
     if (!string.IsNullOrEmpty(cellPhone)) { 
      sb.AppendLine("<li class=\"tel\">"); 
      sb.AppendLine("<span class=\"type\">Cell</span> Phone:"); 
      sb.AppendFormat("<span class=\"value\">{0}</span>",cellPhone); 
      sb.AppendLine("</li>"); 
     } 
     if (!string.IsNullOrEmpty(fax)) { 
      sb.AppendLine("<li class=\"tel\">"); 
      sb.AppendLine("<span class=\"type\">Fax</span>:"); 
      sb.AppendFormat("<span class=\"value\">{0}</span>",fax); 
      sb.AppendLine("</li>"); 
     } 
     if (!string.IsNullOrEmpty(website)) { 
      sb.AppendFormat("<li><a class=\"url\" href=\"{0}\">{0}</a></li>",website); 
     } 
     if (!hideEmail && !string.IsNullOrEmpty(email)) { 
      sb.AppendFormat("<li><a class=\"email\" href=\"mailto:{0}\">{0}</a></li>",email); 
     } 
     sb.AppendLine("</ul>"); 

     if (sb.Length < 10) 
     { 
      return MvcHtmlString.Create(""); 
     } 
     else { 
      return MvcHtmlString.Create(sb.ToString()); 
     } 
    } 

Заранее спасибо.

ОБНОВЛЕНИЕ:
Благодарим за конструктивные комментарии. В конце концов я решил переместить вышеуказанный код в строго типизированное частичное представление в соответствии с предложением @ queen3.

+2

Я лично использовал макросы Spark, где вы можете создавать такие вещи, используя разметку HTML. В движке WebForms вы можете использовать частичные представления. Вы эффективно создаете целое частичное представление внутри вспомогательного метода. Это не то, для чего они нужны. Используйте форматированные строки или создатели тегов, вы в конечном итоге используете неподдающийся кошмарному коду. – queen3

ответ

3

Одна вещь, которую я вижу, люди часто пропускают, использует строки на C# дословно для таких вещей ... например.

sb.AppendLine("<li class=\"tel\">"); 
sb.AppendLine("<span class=\"type\">Work</span>:"); 
sb.AppendLine(string.Format("<span class=\"value\">{0}</span>",phone));    
sb.AppendLine("</li>"); 

может быть сделан в

sb.AppendFormat(@" 
<li class=""tel""> 
    <span class=""type"">Work</span>: <span class=""value"">{0}</span> 
</li> 
", phone); 

который является способом более удобным для чтения.

Другое дело: я бы поместил все эти строки + bool внутри объекта, например ContactInfo или что-то подобное, изменив сигнатуру вашего помощника на BusinessDisplayContacts(this HtmlHelper helper, ContactInfo info) - таким образом вы сможете добавлять/удалять/изменять номера телефонов и условия без нарушение существующий код.

+0

Спасибо, я займусь созданием нового объекта для передачи. Что касается стенографических строк, мне просто не нужно использовать эту особенность языка. Спасибо за отзыв. –

+2

Любые причины, чтобы избежать стенографических строк? – queen3

+0

Проголосовал за вопрос, не говоря уже о том, что вам не нравятся стенографические экраны в вашем вопросе. – jfar

Смежные вопросы