我将 webforms 应用程序转换为 mvc 4。该应用程序在母版页代码隐藏中进行了大量处理,以执行诸如根据用户角色确定用户可以或看不到的内容,在页面底部显示的版本组装等。所有服务器端。
我知道处理不是在代码隐藏中,而是在将数据发送到视图的控制器中。但我不清楚这是如何在 _Layout.cshtml 中完成的
非常感谢
我将 webforms 应用程序转换为 mvc 4。该应用程序在母版页代码隐藏中进行了大量处理,以执行诸如根据用户角色确定用户可以或看不到的内容,在页面底部显示的版本组装等。所有服务器端。
我知道处理不是在代码隐藏中,而是在将数据发送到视图的控制器中。但我不清楚这是如何在 _Layout.cshtml 中完成的
非常感谢
您可能可以做的是使用基本控制器并覆盖该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>
}