我有一个基本控制器类:
和所有我的其他控制器继承这个BaseClass像这样
所有这些工作伟大的MVC3(测试今天,它真的工作),但似乎在BaseController的ExecuteCore不会被触发任何更多的MVC 4 beta。
任何想法?或者什么巨大已经改变了引擎盖下?非常感谢。
public class BaseController : Controller { private string _myData; public string MyData { get { return _myData; } } protected override void ExecuteCore() { _myData = "I am doing something"; base.ExecuteCore(); } } public class HomeController : BaseController { public ActionResult Index() { ViewBag.MyData = MyData; // Doing something with value in BaseClass return View(); } }
解决方法
我能够重现你的问题。看来ExecuteCore的用法被改变了。但我没有找到任何有关它的信息。我的猜测它与事实,现在的Controller实现IAsyncController而不是AsyncController。
但是,我发现了一个解决方法,以获得旧的行为与MVC4:
将此添加到BaseContoller:
protected override bool DisableAsyncSupport { get { return true; } }
从MSDN页面为DisableAsyncSupport(强调由我添加):
This flag is for backwards compatibility. ASP.NET MVC 4. allows a controller to support asynchronous patterns. This means
ExecuteCore
doesn’t get called on derived classes. Derived classes can override this flag and set totrue
if they still needExecuteCore
to be called.