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变量仍然返回空字符串,因此无法使用此选项。