根据ViewModel的属性更改div类

Cus*_*dio 9 c# razor asp.net-mvc-3

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

在特定的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">
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用

Dar*_*rov 11

试试这样:

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

或者为了避免这个可怕的标签汤写一个自定义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);
    }
}
Run Code Online (Sandbox Code Playgroud)

可以像这样使用:

@using (Html.Tab(Model.ActiveTab == 1, new { id = "tab1" }))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下会发出:

<div class="tab-pane active" id="tab1">
    ...
</div>
Run Code Online (Sandbox Code Playgroud)