9

我正在创建一个基于 Twitter 引导程序的页面。

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

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

我的想法是:

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

但显然这不起作用

4

2 回答 2

11

试试这样:

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

或者为了避免这种可怕的标签汤,编写一个自定义 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>
于 2012-04-19T13:42:55.753 回答
3

这应该有效:

<div class="@(Model.ActiveTab == 1 ? "tab-pane active" : "tab-pane")"  id="1">
于 2012-04-19T13:42:30.130 回答