如何在控制器或模型或视图(主体渲染之前)MVC中获取sessionStorage(客户端)值

问题描述 投票:0回答:2
  1. 我想做的是第一次加载应用程序时,我会将菜单存储在客户端sessionStorage中,下一次从sessionStorage中加载任何页面时,都会获取菜单
  2. 我的网站流程是LoginPage>仪表板页面
  3. 仪表板页面呈现为index.csHtml并向读者使用_Layout.csHtml部分视图
  4. 我已在客户端成功存储sessionStorage值,但无法在_Layout.csHtml页面中获得此保存值。
  5. 在_Layout.csHtml正文部分,此代码使用@{Html.RenderAction("RenderTopMenu", "Common");},我需要在此RenderAction中传递sessionStorage值例如:@{Html.RenderAction("RenderTopMenu", "Common", new {model=sessionStorage});}
PAGE - Index.csHtml 

@{
   ViewBag.Title = "Welcome To " + SessionManagement.CompanyName;
   Layout = (ViewBag.isPartialView) ? null : "~/Views/Shared/_Layout.cshtml";
}

PAGE - _Layout.cshtml

<!DOCTYPE html>
<html>
<head>
</head>
<body class="pageContent">

   @{Html.RenderAction("RenderTopMenu", "Common");}
</body>

PAGE - Controller
public ActionResult RenderTopMenu(DashboardViewModel AdminMenus)
       {
           DashboardViewModel Dashboardmodel = new DashboardViewModel();
           Dashboardmodel = DashboardModel.GetTopMenu(Dashboardmodel);
}

PAGE - Model

public List<AdminMenus> GetMenuListFromCache(int AccountMode, DashboardViewModel Dashboardmodel)
       {
List<AdminMenus> AdminMenusList = sessionStorage.getitem("Menu") as List<AdminMenus>;


                   if (AdminMenusList == null) //not in cache
                   {
                       AdminMenuParamsModel menus = new AdminMenuParamsModel()
                       {
                           CompanyID = SessionManagement.IntCompanyID,
                           MenuID = AccountMode
                       };

                       AdminMenusList = new DashboardBLL(SessionManagement.DevPasswordConnectionString).ProcessGetMenus(menus);
                       AdminMenusList = DashboardModel.SetMenuName(AdminMenusList);
                       sessionStorage.setitem("Menu") = AdminMenusList;
                   }
                   return AdminMenusList;
}

NOTE: In a model for only explanation purpose I put sessionStorage.getitem but really I can not use this.
javascript asp.net-mvc asp.net-mvc-4
2个回答
0
投票

在此行@ {Html.RenderAction(“ RenderTopMenu”,“ Common”,新的{model = sessionStorage});}您只需要使用

@@ Html.RenderAction(“ RenderTopMenu”,“ Common”,新的{model = sessionStorage.Menu});}要么@ {Html.RenderAction(“ RenderTopMenu”,“ Common”,新{model = sessionStorage.getitem(“ Menu”)});}理想情况下应该可以工作。


0
投票

您无法从razor访问javascript值,我建议您使用jquery或javascript编码菜单,也可以将菜单对象保存在服务器端的会话中并将其传递到查看包中,然后使用剃须刀。

How to pass a value to razor variable from javascript variable?

© www.soinside.com 2019 - 2024. All rights reserved.