我正在构建一个网站,我需要能够在每个页面上通知用户。该函数看起来很像StackOverflow正在使用的,顶部是黄色(橙色?)边框。我不想在我所有的行为中重现这个逻辑。干。ASP.NET MVC在操作之间共享逻辑
我在考虑使用动作过滤器,但由于我需要查询我的数据层,它似乎不是解决它的最佳方法。
因此,例如,在每个页面上实现诸如“您在X天期间有奖金结束的问题”这样的特征的最佳方式是什么?
我正在构建一个网站,我需要能够在每个页面上通知用户。该函数看起来很像StackOverflow正在使用的,顶部是黄色(橙色?)边框。我不想在我所有的行为中重现这个逻辑。干。ASP.NET MVC在操作之间共享逻辑
我在考虑使用动作过滤器,但由于我需要查询我的数据层,它似乎不是解决它的最佳方法。
因此,例如,在每个页面上实现诸如“您在X天期间有奖金结束的问题”这样的特征的最佳方式是什么?
在ASP.NET MVC 2中有Html.RenderAction。对于ASP.NET MVC 1.0,如果我记得正确的话,在MvcContrib中有相同的功能。
我会使用TempData存储消息,添加一个帮助器来呈现消息(如果有的话),然后在您的母版页中使用它。这基本上就是Rails如何实现的,我一直觉得缺乏通知系统(比如flash)是ASP.net MVC中的一个奇怪的缺陷,只是因为它很容易做到。
是的,但哪里会运行实际的逻辑?我不想在每个Action方法上执行此操作。 – alexn 2010-02-23 19:26:56
当我有需要进行每个动作的逻辑时,需要初始化视图数据,我在我的基本控制器的OnResultExecuting方法(在动作运行之后调用,在视图呈现之前调用)中执行此操作(我的所有控制器继承),其中规定对我的基本视图的数据模型数据(从所有我认为数据模型继承):
public class BaseViewData
{
public string UserMessage { get; set; }
}
public class BaseController : Controller
{
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
ViewResult viewResult = filterContext.ActionResult as ViewResult;
//Only continue if action returned an ActionResult of type ViewResult,
//and that ViewResults ViewData is of type BaseViewData
if(viewResult != null && viewResult.ViewData is BaseViewData)
{
((BaseViewData)viewResult.ViewData).UserMessage = userService.GetUserMessage();
}
}
}
谢谢,这似乎正是我要找的。 – alexn 2010-02-23 19:28:01
这使它。谢谢。 – alexn 2010-02-26 15:01:40