Jquery ASP.NET MVC3在重新加载时为Layout.cshtml中的按钮设置类

Jquery ASP.NET MVC3在重新加载时为Layout.cshtml中的按钮设置类,jquery,asp.net-mvc-3,Jquery,Asp.net Mvc 3,我有一个按钮调用Url.Action到不同视图的场景。加载视图后,我想设置要选择的适当按钮(充当选项卡)。在ViewBag中设置值并尝试检索该值会产生空字符串 布局页面通过AJAX调用设置所选按钮的值,然后将其重新加载为 $(function () { var tab = "My Lists"; $('#btnMyLists').click(function () { $.ajax({ type: "POST

我有一个按钮调用
Url.Action
到不同视图的场景。加载视图后,我想设置要选择的适当按钮(充当选项卡)。在
ViewBag
中设置值并尝试检索该值会产生空字符串

布局页面通过AJAX调用设置所选按钮的值,然后将其重新加载为

$(function () {
        var tab = "My Lists";
        $('#btnMyLists').click(function () {
            $.ajax({
                type: "POST",
                url: '@Url.Action("SetSelectedTab", "Home")',
                datatype: "json",
                data: { "tab": tab },
                success: function (response) {
                    window.location.href = '@Url.Action("MyLists", "AssocLists")';
                },
                error: function (errordata) {
                }
            });
        });
    });
我添加了一种方法,将所选选项卡的状态存储在主控制器中的ViewBag中

    [HttpPost]
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public ActionResult SetSelectedTab(string tab)
    {
        ViewBag.SelectedTab = tab;
        return new JsonResult { Data = new { Ok = true, message = string.Empty } };

    }
但取回ViewBag变量似乎是在渲染视图之前进行的,该视图利用了布局,或者我不确定如何获取ViewBag变量以成功设置按钮的选定类

$(function () {
        //DOES NOT WORK - EMPTY STRING
        var seltab = "@(ViewBag.SelectedTab)";
        if (seltab.length > 0 && seltab == "My Lists")
           $(btnMyLists).addClass('homepageHeaderButtonActive').siblings().removeClass('homepageHeaderButtonActive');
})

应该是这样的:

var seltab = "@ViewBag.SelectedTab";

ViewBag
的生存期仅用于一个请求。当调用您的
SetSelectedTab
操作时,您可以设置
ViewBag.SelectedTab
,但一旦操作完成并将JSON结果发送到客户端,
ViewBag
就会被销毁。在下一个请求中,
ViewBag
为空


您应该做的是创建一个隐藏字段(
此代码是否在视图中(cshtml)?您在哪里设置
ViewBag.SelectedTab
?更改
“@(ViewBag.SelectedTab)”
要使用单引号是的,这在Layout.cshtml中。我尝试通过向主控制器发送AJAX帖子来设置ViewBag中的SelectedTab值。应该可以。请注意,必须在第一次生成页面时设置ViewBag的值。您似乎正在尝试在AJAX调用后读取该值。除非重新加载整个页面无法使用此选项。如果需要在ajax调用中更改选项卡,则ajax响应必须提供显示哪个选项卡的详细信息。ViewBag变量仍然返回空字符串,因此无法使用此选项。