【问题标题】:How do I use razor to make something a link conditionally?如何使用 razor 有条件地创建链接?
【发布时间】:2013-08-29 08:32:20
【问题描述】:

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

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

Some text that needs to appear

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

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

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案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 属性。

    【讨论】:

      【解决方案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)
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-18
          • 1970-01-01
          • 2018-04-09
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多