Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Razor 在局部视图中持久化数据_Razor_Asp.net Core_Partial Views_Razor Pages - Fatal编程技术网

Razor 在局部视图中持久化数据

Razor 在局部视图中持久化数据,razor,asp.net-core,partial-views,razor-pages,Razor,Asp.net Core,Partial Views,Razor Pages,我正在使用ASP.NET Core 2.0和Visual Studio 2017 我想创建一个Razor局部视图来显示应用程序的菜单。菜单是动态创建的,因为每个用户只有他们具有必要权限的菜单项(因此每个用户的菜单都不同) 我遇到的问题是在Razor局部视图中保留菜单。在Razor局部视图中没有页面模型代码,因此我遇到的问题是,当你点击另一个页面时,菜单消失了。我已经将菜单保存在会话存储中,但我不知道如何将菜单从会话存储加载到Razor部分视图中 我已尝试将会话存储菜单加载到查看数据中,但当您单击

我正在使用ASP.NET Core 2.0和Visual Studio 2017

我想创建一个Razor局部视图来显示应用程序的菜单。菜单是动态创建的,因为每个用户只有他们具有必要权限的菜单项(因此每个用户的菜单都不同)

我遇到的问题是在Razor局部视图中保留菜单。在Razor局部视图中没有页面模型代码,因此我遇到的问题是,当你点击另一个页面时,菜单消失了。我已经将菜单保存在会话存储中,但我不知道如何将菜单从会话存储加载到Razor部分视图中

我已尝试将会话存储菜单加载到查看数据中,但当您单击另一个页面时,此功能将消失


如何在我的Razor局部视图中持久化数据

>不使用局部视图,考虑使用视图组件。
public class MenuComponent : ViewComponent
{
    SomeDependency userDetails;

    public MenuComponent(SomeDependency userDetails)
    {
      //store this userDetails data to extract profile info in Invoke method
      this.userDetails = userDetails;
    }

    public IViewComponentResult Invoke() 
    {
       //check for logged in  user profile here and return appropriate view
       return View(viewName,ModelObjectForView);
    }
}
1.创建所需的菜单视图

为显示每个角色或使用的菜单创建适当的视图 条件呈现。 请注意,将查看视图组件的视图 /Views/ControllerName/Components/ViewComponentName/ViewName.cshtml此 位置,而不是/Views/ControllerName/ViewName.cshtml

2.定义布局页面

现在,由于您需要显示用户导航到的所有页面的菜单,您可以 需要在布局页面中提取此视图组件。创建一个\u布局。cshthml 文件,并确保需要显示菜单项的视图使用此布局页面。 在_Layout.cshtml中,您现在可以通过调用

@await Component.InvokeAsync(nameof(MenuComponent))

3.使用ViewComponent而不是PartialView

我建议在本例中使用ViewComponent而不是PartialView,因为 ViewComponent将允许您拥有自己的模型(角色详细信息,供中的用户使用) 你的案例)与PartialView相比 您必须从视图模型中传递一些子数据,因此
在每个视图模型中保留该数据。否则,您甚至可以使用PartialView。这里最重要的是布局页面,它可以帮助您将菜单保存在所有呈现给用户的视图中。

这是一个有趣的解决方案。我将尝试一下,看看它是否有帮助。在阅读了ViewComponents之后,我认为这绝对是正确的方法。我将把这个标记为答案。非常感谢您的解决方案(非常感谢:)