我正在構建一個網站,我需要能夠在每個頁面上通知用戶。該函數看起來很像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