代码之家  ›  专栏  ›  技术社区  ›  Chaddeus

使用ASP.NET Razor视图引擎获得内联代码块的最干净方法是什么?

  •  13
  • Chaddeus  · 技术社区  · 14 年前

    这工作:

    <li @{if (Model.Mode == "map") {<text> class="bselected"</text>}}>@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li>
    

    但它很丑陋…有没有更好、更干净的方法?在这段代码中,我检查一些视图数据是空的还是空的,如果是空的,请添加一个类。

    还是有另一种技术能更好地完成这项任务?

    5 回复  |  直到 14 年前
        1
  •  15
  •   Community skywinder    7 年前

    我昨天发布了一些处理这种事情的HTML扩展方法:

    How to concisely create optional HTML attributes with razor view engine?

    使用此方法将提供以下Razor语法:

    <li @Html.Css("selected", Model.Mode == "map" )>STUFF</li>
    

    注意:可以将属性链接在一起,以基于多个条件构建属性值。例如:

    <li @Html.Css("selected", true).Add("winner", false).Add("last", true)>STUFF</li>
    

    输出:

    <li class="selected last">STUFF</li>
    

    此外,如果结果属性值为空,则属性将折叠以保持HTML整洁。

        2
  •  12
  •   Simon Bartlett    14 年前

    或者你可以这样做:

    @{
        var cssClass = (Model.Mode == "map") ? "selected" : "";
    }
    
    <li class="@cssClass">@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li>
    
        3
  •  2
  •   James H    14 年前

    如何使用三元运算符对表达式进行如下求值:

    <li @(Model.Mode == "map" ? "class='bselected' : "")>@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li> 
    
        4
  •  2
  •   GvS    14 年前

    使用@functions部分中的方法:

    @functions{
       public HtmlString Li(bool selected, IHtmlString template) {
          var result = string.Format("<li{0}>{1}</li>",
             selected ? " class='selected'" : "")),
             template);
          return new HtmlString(result);
       }
    }
    
    @* ... *@
    
    @Li(Model.Mode == "map", Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty)))
    
        5
  •  0
  •   Buildstarted    14 年前

    我可能会说你可以把这个类添加到你的模型中

    <li class="@Model.Selected">@Html.ActionLink("Map & Directions", MVC.Biz.Show(Model.SingleBiz.BizName, "map", string.Empty))</li>
    

    那会清理干净的…

    删除了第二个示例,因为我意识到它不起作用