asp.net-mvc – 如何将值传递给MVC3母版页(_layout)?
发布时间:2020-12-16 03:58:42 所属栏目:asp.Net 来源:网络整理
导读:我有一个自定义模型绑定器,它检查身份验证cookie并返回值. public class UserDataModelBinderT : IModelBinder{ public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { if (controllerContext.RequestContext
我有一个自定义模型绑定器,它检查身份验证cookie并返回值.
public class UserDataModelBinder<T> : IModelBinder { public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { if (controllerContext.RequestContext.HttpContext.Request.IsAuthenticated) { var cookie = controllerContext.RequestContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie == null) return null; var decrypted = FormsAuthentication.Decrypt(cookie.Value); if (!string.IsNullOrWhiteSpace(decrypted.UserData)) return JsonSerializer.DeserializeFromString<T>(decrypted.UserData); } return null; } } 如果我需要使用它,我只需要将它传递给动作.一切正常. public ActionResult Index(UserData userData) { AccountLoginWidgetVM model = new AccountLoginWidgetVM(); if (null != userData) model.UserData = userData; return View(userData); } 但是,我想在我的母版页中使用它,因为一旦用户登录,我想在每个页面的顶部显示他们的信息.我尝试了一些东西,但是不能让它发挥作用 @Html.RenderPartial("LoginPartial",???model here??) 解决方法
我们这样做了:
>为主页定义单独的viewmodel. public class MasterPageViewModel { public Guid CurrentUserId { get; set; } public string CurrentUserFullName { get; set; } } >添加了注入过滤器和过滤器提供商 public class MasterPageViewModelInjectorFilterProvider: IFilterProvider { public IEnumerable<Filter> GetFilters(ControllerContext controllerContext,ActionDescriptor actionDescriptor) { return new [] {new Filter(new MasterPageViewModelInjectorFilter(),FilterScope.Action,null),}; } private class MasterPageViewModelInjectorFilter: IResultFilter { public void OnResultExecuting(ResultExecutingContext filterContext) { var viewResult = filterContext.Result as ViewResult; if (viewResult == null) return; if (viewResult.ViewBag.MasterPageViewModel != null) return; //setup model whichever way you want var viewModel = new MasterPageViewModel(); //inject model into ViewBag viewResult.ViewBag.MasterPageViewModel = viewModel; } public void OnResultExecuted(ResultExecutedContext filterContext) { } } } >配置筛选提供程序: //in Application_Start FilterProviders.Providers.Add(new MasterPageViewModelInjectorFilterProvider()); >在master中使用: ViewBag.MasterPageViewModel 这样你就可以得到很好的解耦结构.当然你可以将它与依赖注入结合起来(我们这样做,但为了清楚起见,我把它留了出来)并根据你想要的方式为每个动作配置你的动作过滤器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何关闭viewstate好?
- asp.net-mvc – 阻止bingbot抓取我的网站
- asp.net-mvc – 创建新控制器 – 运行所选代码生成器时出错
- asp.net-mvc-3 – 子动作是否与其“父母”动作共享相同的Vi
- 从Asp.Net 4项目进入引用的.Net 3.5程序集
- asp.net-mvc-3 – 在Razor视图中显示List元素
- 你应该在哪里定期登录asp.net-mvc?你应该使用ELMAH吗?
- ASP.NET web.config:system.web.compilation中的debug属性
- 依赖性 – 安装RavenDb Embedded的Nuget依赖性错误
- asp.net-mvc – Azure持续集成
推荐文章
站长推荐
- asp.net – 为什么IIS Express使用而不是?
- asp.net – Linq to Sql – 根据环境变量动态设置
- asp.net – 带有MVC 2的自定义ViewModel强类型HT
- asp.net-web-api – 将List转换为JSon并在Web AP
- asp.net中让Repeater和GridView支持DataPager分页
- asp.net – 如何使用HTML5电子邮件输入类型与服务
- [asp.net mvc 奇淫巧技] 03 - 枚举特性扩展解决枚
- 用Scrutor来简化ASP.NET Core的DI注册
- asp.net – 如何在asp标签中将文本与中心对齐
- ASP.NET私有成员字段在回发时丢失了值
热点阅读