質問

簡単な質問。

この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の提案に従って、上記のコードを強くタイプされた部分ビューに移動することにしました。

役に立ちましたか?

解決

私が人々がよく見逃しているのを見て、そのようなもののために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);

これはより読みやすいです。

別のこと:私はそれらすべての文字列 +ブールをオブジェクトの中に入れます。 ContactInfo または何か、あなたのヘルパーの署名を変更する BusinessDisplayContacts(this HtmlHelper helper, ContactInfo info) - このようにして、既存のコードを壊すことなく、電話番号と条件を追加/削除/変更できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top