現在、次のようなコードを使用しているカミソリビューがあります。
@if(Model.IsLink)
{
<a href="...">
}
Some text that needs to appear
@if(Model.IsLink)
{
</a>
}
これは機能しますが、コードはクリーンではありません。このパターンを達成するためのより良い/より受け入れられる方法はありますか?
現在、次のようなコードを使用しているカミソリビューがあります。
@if(Model.IsLink)
{
<a href="...">
}
Some text that needs to appear
@if(Model.IsLink)
{
</a>
}
これは機能しますが、コードはクリーンではありません。このパターンを達成するためのより良い/より受け入れられる方法はありますか?
カスタム HtmlHelper メソッドを作成できます。ここでそれを行う方法に関するリファレンスを参照してください: http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs
メソッドは「IsLink」ブール値をパラメーターとして取り、それを使用してアンカーまたはプレーンテキストを出力できます。これがどのように見えるかのサンプルです:
namespace MvcApplication1.Helpers
{
public static class LabelExtensions
{
public static string LinkableText(this HtmlHelper helper, bool isLink, string text, string url = null)
{
return isLink ? string.Format("<a href='{0}'>{1}</a>", url, text) : text;
}
}
}
HTML 5 では、リンクがない場合、このようなマークアップを持つことは有効です
<a>some text</a>
もしそうなら、このようなマークアップ
<a href="http://example.com">some text</a>
また、razor v2 以降では、null 条件付き属性が href を処理するため、コードは次のようになります。
<a href="@link">some text</a>
@link
null の場合、href 属性は省略されます。