asp.net-mvc-4 – Razor MVC,在哪里可以通过母版页面,部分视图和视图访问全局变量?
|
你好Razor MVC Gurus: 新手问题 背景.我有一个自定义的IIdentity,设置在一个HttpModule之前,它得到控制器&观点.要使用它,我必须要做 MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity; MyComplexUser user = myIdentity.User; //user.name //user.location //user.username //etc 问题是,我在不同的地方使用对象 >主布局 它真的取决于视图需要什么属性的“MyComplexUser”对象. 目前,在意见中,我必须做这个真正复杂的铸造来获得一个财产.例如,如果我想要用户的“名称”,我需要做 @(((MyComplexUser)(((MyIdentity)((的GenericPrincipal)context.User).Identity).用户)).名称) 我想我可以把它放在控制器中,然后用ViewBag.MyUser属性填充ViewBag,但是 >我不喜欢使用ViewBag.我喜欢强类型的对象 谢谢.再次,我是MVC 4的新手,任何建议都非常感谢. 解决方法我会解释一个类似的解决方案,对我来说很好.有了小的变化,我相信它会为你(和其他人,希望)也是有效的.基本上,我们将使用继承. 控制器 我们创建一个自定义的基本控制器,如 public class BaseController : Controller 让我们改变我们的控制器来继承它 public class HomeController : BaseController 模型(ViewModels,我说) 你的Models文件夹里可能有很多类,对吧?他们作为DTO从控制器到意见,对? 让我们创建一个基础模型类,如公共类BaseVM,让我们将模型更改为继承,如public class HomeIndex:BaseVM 重要提示:您的布局文件(_Layout或任何)必须强制键入BaseVM或其子. 钩子 现在,所有的东西都是非常简单的,我们来帮助我们使用这个请求管道. protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResultBase)//Gets ViewResult and PartialViewResult
{
object viewModel = ((ViewResultBase)filterContext.Result).Model;
if (viewModel != null && viewModel is BaseVM)
{
BaseVM baseVM = viewModel as BaseVM;
baseVM.MyIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
//and so on...
}
}
base.OnActionExecuted(filterContext);//this is important!
}
OnActionExecuted在执行操作之后但在视图呈现之前被调用.这正是我们想要的. 我希望你已经有了. =) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Ajax.BeginForm,调用操作,返回JSON,如何在我
- asp.net – 获得“System.Web.Mvc.Html.MvcForm”一页
- C# 快速高效率复制对象另一种方式 表达式树
- asp.net – aspnet_compiler找到错误版本的System.Web.WebP
- asp.net – 在machine.config中存储连接字符串vs将它们存储
- asp.net – 如何从c#调用javascript函数
- asp.net-mvc-3 – 不明显的客户端验证规则中的验证类型名称
- asp.net-mvc – 是否由Razor支持lambda表达式?
- asp.net-mvc – 所有ASP.NET Web API控制器返回404
- asp.net-mvc-3 – 使用Jquery Ajax渲染部分视图与变量数据
- asp.net-mvc-4 – 如何在asp.net mvc4中将OpenID
- ASP.NET linkbutton两次提高onBeforeUnload事件
- 在Azure中设置ASP.NET 5 Web应用程序的SQL连接字
- asp.net – 如何将Controller上的Ajax reqest重定
- asp.net – 无法从HRESULT加载文件或程序集异常:
- asp.net – HttpMethod和HttpRequest的RequestTy
- asp.net-mvc-3 – 如何在输出缓存中使用动态持续
- asp.net-mvc – 如何将特定于HTTP-Request的对象
- asp.net-mvc – 将索引设置为控制器的默认路由
- asp-classic – 超过响应缓冲区限制
