0

我将 webforms 应用程序转换为 mvc 4。该应用程序在母版页代码隐藏中进行了大量处理,以执行诸如根据用户角色确定用户可以或看不到的内容,在页面底部显示的版本组装等。所有服务器端。

我知道处理不是在代码隐藏中,而是在将数据发送到视图的控制器中。但我不清楚这是如何在 _Layout.cshtml 中完成的

非常感谢

4

1 回答 1

0

您可能可以做的是使用基本控制器并覆盖该OnActionExecuting方法,然后使用ViewBag动态属性将值传递给您的_Layout.cshtml

public abstract class BaseController : Controller
{
   protected override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      var user = filterContext.Controller.ControllerContext.RequestContext.HttpContext.User;
      // do whatever you need to do
      ViewBag.CanUserViewSomethingSecret = user.Identity.Name == "Kermit";
   }
}

您需要使用应用程序控制器扩展此基本控制器

public class HomeController : BaseController 
{
    public ActionResult Index()
    {
        return View();
    }
}

然后在您的_Layout.cshtml您可以像这样访问该ViewBag属性...

   @if(ViewBag.CanUserViewSomethingSecret != null && (bool) ViewBag.CanUserViewSomethingSecret == true) 
   {
       <p>Secret</p>
   }
于 2012-09-10T15:34:26.207 回答