Mar*_*ijn 6 c# asp.net-mvc viewdata
当用户登录我的应用程序时,我想在整个应用程序中显示他的名字.我正在使用asp.net MVC框架.但我不想要的是必须在每个控制器中添加如下内容:
ViewData["User"] = Session["User"];
Run Code Online (Sandbox Code Playgroud)
这是因为你可能不会重复自己.(我相信这是OO编程的DRY [不要重复自己]原则.)ViewData ["User"]在我的主页上.所以我的问题是,在一个地方处理我的ViewData ["用户"]的简洁方法是什么?
Mar*_*ell 12
您可以在控制器基类或应用于控制器/操作的操作过滤器中相当容易地执行此操作.在任何一种情况下,您都有机会在操作之前(或之后)触摸请求 - 因此您可以在此处添加此功能.
例如:
public class UserInfoAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(
ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
filterContext.Controller.ViewData["user"] = "Foo";
}
}
...
[HandleError, UserInfo]
public class HomeController : Controller
{...}
Run Code Online (Sandbox Code Playgroud)
(也可以在动作(方法)级别使用)
或者使用共同的基类:
public abstract class ControllerBase : Controller
{
protected override void OnActionExecuting(
ActionExecutingContext filterContext)
{
ViewData["user"] = "Bar";
base.OnActionExecuting(filterContext);
}
}
[HandleError]
public class HomeController : ControllerBase
{...}
Run Code Online (Sandbox Code Playgroud)
这是一年,但我偶然发现了这个问题,我相信有更好的答案.
Jimmy Bogard将接受的答案中描述的解决方案描述为反模式,并提供更好的解决方案,包括RenderAction
:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/18/the-filter-viewdata-抗pattern.aspx
归档时间: |
|
查看次数: |
3695 次 |
最近记录: |