ASP.Net MVC 3从HTTP-POST方法发送字符串到_Layout.cshtml

本文关键字:字符串 cshtml Layout 方法 MVC Net HTTP-POST ASP | 更新日期: 2023-09-27 18:08:22

我正试图调整AccountController类,使其使用我自己的后端数据库。为了完全做到这一点,我需要发送一个字符串到_Layout。要检查的CSHTML。这怎么可能呢?

我已经尝试过ViewData,但这需要控制器对应于附加的视图,例如AccountController到view/Account/LogOn。CSHTML也可以。

我相信ViewBag的工作方式与我在_Layout.cshtml中访问它时获得空引用的方式相同。

目前我的代码有点损坏,由于试图解决这个问题,但这里是我所拥有的。希望这将有助于更好地解释。

AccountController/(http - post)登录

...
if (user.GetRole(model.UserName).Equals("Admin"))
{
     ViewBag.Role = "Admin";
}
...

_Layout.cshtml

@if (Request.IsAuthenticated && ViewBag.Role.Equals("Admin"))
{
   ...
}

我不再认为这可以与ViewBag或ViewData(由于评论)。我们欢迎任何解决方案。

提前感谢-安口

ASP.Net MVC 3从HTTP-POST方法发送字符串到_Layout.cshtml

将代码改为

if (user.GetRole(model.UserName).Equals("Admin"))
{
    ViewBag.Role = "Admin";
}
else{
    ViewBag.Role = "";
}

您将得到ViewBag.Role不存在的错误。所以必须始终设置

编辑

从你的评论,我认为你可能最好创建一个子操作,它有自己的控制器,并为你做的工作。

@Html.RenderAction("LogonDisplay");

这将检查角色,设置ViewBag值,然后根据需要显示

您可能在调用Logon操作之前使用_Layout。因此,在_Layout上加一个复选框。

@if (Request.IsAuthenticated && ViewBag.Role != null && ViewBag.Role.Equals("Admin"))
{
   ...
}