2012-04-19 101 views
8

我正在创建基于Twitter引导的页面。更改基于ViewModel属性的div类

在一个特定的CUD中,我需要更改一个div类。 class="tab-pane active"class="tab-pane",这取决于我的viewmodel的属性。

该属性可能是一个int,然后对于每个div,我将在活动选项卡上进行验证。这听起来正确吗?

我想在这样的:

<div(@Model.ActiveTab == 1 ? class="tab-pane active" : class="tab-pane") id="1"> 

但显然这并不工作

+0

IS作为ActiveTab的价值预期? – 2012-04-19 13:41:53

回答

10

尝试这样的:

<div class="tab-pane @(Model.ActiveTab == 1 ? " active" : "")" id="1"> 
    ... 
</div> 

或者为了避免这种情况rible标签汤编写自定义的HTML帮助:

public static class TabExtensions 
{ 
    private class TabControl: IDisposable 
    { 
     private readonly ViewContext _viewContext; 
     public TabControl(ViewContext viewContext) 
     { 
      _viewContext = viewContext; 
     } 

     public void Dispose() 
     { 
      _viewContext.Writer.Write("</div>"); 
     } 
    } 

    public static IDisposable Tab(this HtmlHelper htmlHelper, bool active, object htmlAttributes) 
    { 
     var div = new TagBuilder("div"); 
     div.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 
     div.AddCssClass("tab-pane"); 
     if (active) 
     { 
      div.AddCssClass("active"); 
     } 
     htmlHelper.ViewContext.Writer.Write(div.ToString(TagRenderMode.StartTag)); 
     return new TabControl(htmlHelper.ViewContext); 
    } 
} 

可能这样使用:

@using (Html.Tab(Model.ActiveTab == 1, new { id = "tab1" })) 
{ 
    ... 
} 

,并在这种情况下会发出:

<div class="tab-pane active" id="tab1"> 
    ... 
</div> 
+1

+1比我的答案好:D – 2012-04-20 07:20:13

2

这应该工作:

<div class="@(Model.ActiveTab == 1 ? "tab-pane active" : "tab-pane")" id="1">