我在ViewBag进程中向IAuthorizationFilter.OnAuthorization提供数据,它为_Layout.cshtml-in提供数据,但是当我在普通视图中使用部分视图时,ViewBag中的数据为null。这是正常行为,还是我做错了什么?
public class MyAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
filterContext.Controller.ViewBag.Name = this.name;
filterContext.Controller.ViewBag.Menus = user.GetMenu(this.role);
}
...
}_Layout.cshtml:
<section id="login">
Hello, <span class="username">@ViewBag.Name</span>!
</section>
<nav>
@Html.MenuLink(ViewBag.Menus as List<Entity.Models.MENU>, (string)ViewBag.Name)
</nav>意见:
@model Web.ViewModels.RegistrationEntryViewModel
@Html.Partial("_RegistrationEntry", Model)行动:
[MyAuthorize("ADMINISTRATORS")]
[HttpGet]
public ActionResult NewRegistrationEntry()
{
//The viewbag is already null here
...
}发布于 2014-06-25 15:01:15
请不要再那样使用ViewBag了。它不是为这个而设计的。ViewBag在控制器中为空的原因(我怀疑)是过滤器和控制器中的不同ViewBag对象。
如果您需要在您的观点中执行重复的操作,那么有更好的方法可以做到这一点。对于您的菜单,我将创建一个操作,用于读取菜单信息,将其放入ViewModel (而不是在ViewBag中),并输出部分视图。那么在你的布局中,我会呈现出部分动作。(还在这个部分视图上添加一些缓存)
https://stackoverflow.com/questions/24411272
复制相似问题