1

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

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

Some text that needs to appear

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

这可行,但代码感觉不干净。有没有更好/更被接受的方式来完成这种模式?

4

3 回答 3

2

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

          }
     }
}
于 2013-08-26T19:12:10.327 回答
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)
于 2013-08-29T00:33:55.217 回答
1

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

于 2016-03-08T03:33:31.873 回答