在ASP.NET MVC中选择“页面加载时选项卡”

时间:2015-11-12 14:48:47

标签: javascript jquery asp.net-mvc twitter-bootstrap bootstrap-tabs

我在Razor页面上有两个标签,我希望能够加载页面并选择页面A或B.目前,页面加载并始终登陆A.我试图按如下方式执行此操作。 。

在我的主视图中,我调用了我的产品视图

<a class="btn btn-default"
   href='@Url.Action("Index", "Products", new { id = "productB" })'
   role="button">
   Learn More 
</a>

我传递路线值&#34; productB&#34;所以我可以尝试加载标签。在我的产品控制器中我有

public ActionResult Index(object id = null)
{
    if (id != null && !String.IsNullOrEmpty())
        ViewBag.ActiveTab = id.ToString();
    return View();
}

产品视图

@{
    string activeTab = ViewBag.ActiveTab;
}

<div class="products container">
    <ul class="nav nav-tabs">
        <li class="active">
            <a data-toggle="tab" href="#productA">
                <span class="glyphicon glyphicon glyphicon-plus-sign"></span>productA
            </a>
        </li>
        <li>
            <a data-toggle="tab" href="#productB">
                <span class="glyphicon glyphicon glyphicon-align-left"></span>productB
            </a>
        </li>
    </ul>
    <div class="products-body">
        <div class="tab-content">
            <div id="productA" class="tab-pane active fade in">
                ...
            </div>
            <div id="productB" class="tab-pane fade">
                ...
            </div>
        </div>
    </div>
</div>

具有功能

$(function () {
    var selector = '@activeTab';
    $("#" + selector).addClass("active");

    // Also tried the following...
    // var anchor = '@activeTab' || $("a[data-toggle=tab]").first().attr("href");
    // $('a[href=' + anchor + ']').tab('show');
});

但这不会选择我的标签页。这看起来很简单,我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

尝试

$(function () {
    var anchor = "@Html.Raw(HttpUtility.JavaScriptStringEncode(activeTab))"
        || $(".nav-tabs a").first().attr("href").replace('#','');
    //$('#'+anchor).tab('show');
    $('.nav-tabs a[href=#' + anchor + ']').tab('show');
});

同时确保您拥有activated the tabs

$('.nav-tabs a').click(function (e) {
    e.preventDefault()
    $(this).tab('show')
})

JSFiddle demo

答案 1 :(得分:1)

首先,您应该将参数类型从object更改为string。如果你把它作为对象,当你从ViewBag的剃刀视图中读取它时,你不会得到你期望的字符串(A或B),而是你将获得System.Object

public ActionResult Index(string id = null)
{
    if (id != null)
        ViewBag.ActiveTab = id.ToString();
    return View();
}

此外,您应该通过调用该选项卡的锚标记上的tab方法来启用选项卡。我将标记更改为包含每个锚标记的Id,以便我们稍后可以在jQuery代码中选择元素。

<ul class="nav nav-tabs">
    <li class="active">
        <a data-toggle="tab" id="link-tabA" href="#productA">
            <span class="glyphicon glyphicon glyphicon-plus-sign"></span>productA
        </a>
    </li>
    <li>
        <a data-toggle="tab" id="link-tabB" href="#productB">
            <span class="glyphicon glyphicon glyphicon-align-left"></span>productB
        </a>
    </li>
</ul>

现在,在您准备好的文档中,使用@activeTab变量值(您已从ViewBag中读取)的值来构建a标记的jQuery选择器表达式并在其上调用show方法。

$(function () {
    var selector = '@activeTab';
    if(selector)
    {
       $("#link-tab"+selector).tab('show');
    }        
});