【问题标题】:How to show Menu Array in Razor View from appsettings.json in ASP.NET Core RazorPages如何在 ASP.NET Core RazorPages 中的 appsettings.json 在 Razor 视图中显示菜单数组
【发布时间】:2019-03-13 00:27:46
【问题描述】:

如何在 ASP.NET Core RazorPages 中的 appsettings.json 中在 Razor 视图中显示菜单数组,这几天我一直坚持。任何人都可以给我一个解决方案吗?

public void OnGet()
{
    ViewData["Test"] = Test().AsEnumerable();
}

public class AppMenu
{
    public string MenuName { get; set; } // Module Name
    public List<AppMenu> MenuList { get; set; } = new List<AppMenu>();
}

public string Test()
{
    var apps = new List<AppMenu>();
    List<string[]> listMenus = new List<string[]>();
    var hpMenu = new[] { "xxx", "xxx", "xxx", "xxx", "xxx" };
    var vtMenu = new[] { "yyy", "yyy", "yyy", "yyy", "yyy" };
    var purAgr = new[] { "zzz", "zzz", "zzz" };
    var mainManu = new[] { "aaa", "aaa"};
    listMenus.Add(hpMenu);
    listMenus.Add(vtMenu);
    // listMenus.Add(hpMenu)
    foreach (var main in mainManu)
    {
        AppMenu appmainmenu = new AppMenu();
        appmainmenu.MenuName = main;
        apps.Add(appmainmenu);
    }
    for (var i = 0; i <= listMenus.Count - 1; i++)
    {
        List<AppMenu> lsmenu = new List<AppMenu>();
        foreach (var menustr in listMenus[i])
        {
            AppMenu appmenu = new AppMenu();
            appmenu.MenuName = menustr;
            if (menustr == "Purchase Agreement")
            {
                foreach (var it in purAgr)
                {
                    AppMenu purr = new AppMenu();
                    purr.MenuName = it;
                    appmenu.MenuList.Add(purr);
                }
            }
            lsmenu.Add(appmenu);
        }
        apps[i].MenuList = lsmenu;
    }
    return JsonConvert.SerializeObject(apps);
}

任何人都可以帮我显示菜单,就像这样。 Index.cshtml(例如)

@foreach (var test in ViewData["Test"])
{
    <p>@test</p>
}

【问题讨论】:

  • 如何在View中使用Test()方法。

标签: c# json razor asp.net-core-mvc razor-pages


【解决方案1】:

我不确定,您到底想做什么以及为什么要将 JsonString 转换为可枚举。

如果您在视图中需要这些类,您可以通过在模型中定义菜单列表来使用它们:

public List<AppMenu> AppMenues;
public void OnGet()
{
    AppMenues = Test();
}

在您的测试函数中,您应该简单地返回您正在创建的列表。我会使用你的函数名,但你真的应该重命名它:

public List<AppMenu> Test()
{
    var apps = new List<AppMenu>();
    //your filling logic
    return apps;
}

现在您可以在 RazorPage 中使用它:

@page
@model HomeModel
@{
    foreach (var i in Model.AppMenues)
    {
        <p>@i.MenuName</p>
    }
}

如果您不在名为 home 的页面上,您的模型名称应该不同。

【讨论】:

  • 不能只返回没有JsonConvert的应用
  • 谢谢你的例子,现在我可以理解如何使用测试方法了。
  • 但在公共字符串 Test() 中更改为公共 List Test()
  • 但即使这样我也无法获取菜单列表
  • 你能试着多解释一下这个问题吗?什么不完全有效?列表是空的吗?剃须刀页面中根本不能使用模型吗?
猜你喜欢
  • 2021-09-21
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多