2009-07-27 58 views
2

我在BaseController的OnActionExecuting方法中做了一些事情,即我所有的其他控制器都基於。用什麼來代替OnActionExecuting? ASP.NET MVC

我做就像把一個變量到ViewData的是「幾乎」所有的我的觀點需要,並填充我的控制器使用幾個屬性一些簡單的事情。

件事,我的錯誤是,這項工作正在做,甚至在不需要它的行動。有沒有更好的地方可以更好地完成這項工作?如果我需要一些比我現在所做的更重的事情(即DB訪問等)。

更新:我更特指典型的控制器方案。哪裏有幾個簡單顯示視圖的動作。還有一些提交表單,做一些工作,然後重定向到另一個行動。

在這種情況下,我想這表明意見爲使用在OnActionExecuting方法所做的工作的行動。但是接受表單提交的操作,OnActionExecuting中正在執行的工作沒有被使用,因此只是增加了不必要的處理時間。

也許我沒有解釋得很好...希望它更清晰了。

TIA!

回答

3

如果將白名單操作(通過歸因於不應執行此邏輯的操作歸因於白名單操作)比白名單操作更容易,則可以創建[SuppressWhateverLogic]屬性並將其應用於要列入黑名單的方法。然後修改您的OnActionExecuting()方法以查找此屬性(通過ActionExecutingContext.ActionDescriptor.IsDefined()),如果該屬性存在,則退出邏輯。

如果將白名單操作更容易,則將邏輯移出Controller.OnActionExecuting(),並通過繼承ActionFilterAttribute的子類來創建自定義的[MyLogic]過濾器。將邏輯添加到MyLogicAttribute.OnActionExecuting()中,然後將所需的方法與[MyLogic]相關聯,以將邏輯與這些方法相關聯。

+0

我目前不在我可以訪問我的代碼的地方,但這聽起來像是一個合理的解決方案。謝謝! – Chaddeus 2009-07-27 06:02:58

0

創建第二個 「AdvancedBaseController」 從BaseController派生?

+0

那麼,在我典型的控制器中......有些操作只是顯示視圖。那些我想要使用我在BaseController中執行的工作。有一些操作,例如在重定向到另一個操作之前接收到一個帖子以在後端執行一些工作的操作。我只想排除那些參與OnActionExecuting的人,因爲它只是將處理時間添加到那些不需要數據的請求中。 – Chaddeus 2009-07-27 05:11:13

相關問題