controller – 基类中的ExecuteCore()在MVC 4 beta中未触发

前端之家收集整理的这篇文章主要介绍了controller – 基类中的ExecuteCore()在MVC 4 beta中未触发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基本控制器类:

和所有我的其他控制器继承这个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 to true if they still need ExecuteCore to be called.

猜你在找的asp.Net相关文章