如何使用剃须刀有条件地制作链接?

时间:2013-08-26 19:01:16

标签: asp.net-mvc razor

我有一个剃刀视图,我目前正在使用看起来像这样的代码:

@if(Model.IsLink)
{
    <a href="...">
}

Some text that needs to appear

@if(Model.IsLink)
{
    </a>
}    

这样可行,但代码感觉不干净。是否有更好/更可接受的方式来实现这种模式?

3 个答案:

答案 0 :(得分:2)

这是一个我认为更清洁的简单方法。

将文本设置为视图顶部的变量:

@{
   var someText = "Some text that must appear";
 }

然后有条件地输出:

@if (Model.IsLink)
{
    <a href='#'>@someText </a>
}
else
{
    @someText
}

上面的多行if语句避免了使用HTML进行字符串构造,但是如果要将语法压缩到一行,则可以执行此操作。

@Html.Raw(Model.IsLink?String.Format("<a href='#'>{0}</a>",someText):someText)

答案 1 :(得分:1)

您可以创建自定义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;

          }
     }
}

答案 2 :(得分:1)

在HTML 5中,valid如果您没有链接,则可以使用此标记

<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属性。