2011-04-14 72 views
0

我的mvc应用程序mvc 3使用spark view引擎有问题。 我想基于HttpContext.User.Identity绑定一个附加到application.spark(母版页)的下拉列表。 问题是..我应该把包含SelectList的ViewData作为我的DropDownList数据源? 此下拉列表将在我的应用程序的所有页面中访问。 有一篇关于它的文章:http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs,但它没有解决我的问题,因为我无法从ApplicationController获取User.Identity。根据登录用户传递数据以查看母版页

有什么想法吗?

回答

1
  • 您可以创建自己的基本控制器并覆盖OnActionExecuting方法。

    protected override void OnActionExecuting(ActionExecutingContextfilterContext) 
    { 
        var userName = User.Identity.Name; 
        ViewData["MySelectList"] = new SelectList(AllUsers, "Id", "UserName", userName); 
    } 
    
  • 您可以创建一个action filter并覆盖“OnActionExecuting”的方法 - 那么过滤器适用于每个控制器。

    public class MyCustomActionFilterAttribute : ActionFilterAttribute 
    { 
        public override void OnActionExecuting(ActionExecutingContext filterContext) 
        { 
        var userName = filterContext.RequestContext.HttpContext.User.Identity.Name; 
         filterContext.Controller.ViewData["MySelectList"] = new SelectList(AllUsers, "Id", "UserName", userName); 
        } 
    } 
    
    [MyCustomActionFilter] 
    public class HomeController:Controller 
    {.... 
    }