首页 > 解决方案 > 如何从.net核心中的pagemodel cs文件将信息传递回剃须刀页面

问题描述

我想根据 user.identity.name 隐藏 cshtml 页面的某些部分。

我有应用程序配置文件,我从中成功检索了用户管理信息:

这是该代码的c#片段

        public IActionResult OnGet()
    {
        string admin = _context.ApplicConfs.Select(s => s.AppAdmin).FirstOrDefault();
        string badmin = _context.ApplicConfs.Select(s => s.BackAdmin).FirstOrDefault();
        ViewBag.uadmin = admin;
        ViewBag.ubadmin = badmin;
        return ViewBag();
    }

cshtml 代码当前执行以下操作:

    @*@if (@User.Identity.Name == (ViewBag.uadmin) ||  @User.Identity.Name == (ViewBag.ubadmin))
{*@

其次是显示什么 html 不显示(有条件地)

这样的东西在 .net core MVC 中有效,但在 .net core razor 页面中无效。

如何将上面的管理字符串从 c# pagemodel 页面传递到 cshtml razor 页面,以便可以将当前的@user.identity.name 与管理字符串进行比较?

对不起,如果这是一个愚蠢的问题......

标签: c#asp.net-corerazor-pagesasp.net-core-3.1

解决方案


您可以尝试使用 ViewData,这是一个演示:

TestHidden.cshtml.cs:

[BindProperty]
        public User User { get; set; }
        public IActionResult OnGet()
        {
            User= new User { Identity = new Identity { Name = "admin" } };
            ViewData["uadmin"] = "admin";
            ViewData["ubadmin"] = "badmin";
            return Page();
        }

类:

public class User {
        public Identity Identity { get; set; }
    }
    public class Identity
    {
        public string Name { get; set; }
    }

TestHidden.cshtml:

@if (@Model.User.Identity.Name == ViewData["uadmin"] || @Model.User.Identity.Name == ViewData["ubadmin"])
{
    <h1>User.Identity.Name:@Model.User.Identity.Name</h1>
    <h1>ViewData["uadmin"]:@Model.ViewData["uadmin"]</h1>
    <h1>ViewData["ubadmin"]:@Model.ViewData["ubadmin"]</h1>
}

结果: 在此处输入图像描述


推荐阅读