C# 重写CreateTempDataProvider()以解决System.Web.Mvc.Controller.PossiblyLoadTempData()处的空引用异常

C# 重写CreateTempDataProvider()以解决System.Web.Mvc.Controller.PossiblyLoadTempData()处的空引用异常,c#,asp.net-mvc-3,controller,overriding,C#,Asp.net Mvc 3,Controller,Overriding,所以我在MVC3站点上实现了一个基本控制器,以便在加载每个视图之前执行一些操作。特别是我想要的东西,将作为一种母版页代码背后。一旦我将其滚动并使我的所有控制器从我的基本控制器继承,我会出现以下错误: Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about

所以我在MVC3站点上实现了一个基本控制器,以便在加载每个视图之前执行一些操作。特别是我想要的东西,将作为一种母版页代码背后。一旦我将其滚动并使我的所有控制器从我的基本控制器继承,我会出现以下错误:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.



[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Mvc.Controller.PossiblyLoadTempData() +11
System.Web.Mvc.Controller.ExecuteCore() +38
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970061
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
这是我开始调试时尝试运行的控制器(如果需要,不知道):


您需要调用重写的
Initialize()
方法顶部的
base.Initialize()
来初始化base
Controller


否则,将永远不会设置
PossiblyLoadTempData()
使用的属性。

好吧,冒着看起来更无知的风险。。在initialize()中传递什么?@davidisawesome:您在重写中收到的参数。
 public class BaseController : Controller
{
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {

        string document = Path.Combine(HttpRuntime.AppDomainAppPath, "quote.xml");
        string _quote = "";
        string _author = "";
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(document);

        XmlNode Quote = xmlDoc.SelectSingleNode("quote/text");
        XmlNode Author = xmlDoc.SelectSingleNode("quote/author");

        _quote = Quote.InnerText;
        _author = Author.InnerText;

        ViewData["Quote"] = _quote;
    }

    protected override ITempDataProvider CreateTempDataProvider()
    {
        return base.CreateTempDataProvider();
    }
}
public class BlogController : BaseController
{
    private DarkRobotEntities1 db = new DarkRobotEntities1();

    //
    // GET: /Blog/

    public ViewResult Index()
    {
        var posts = db.Posts.Include(p => p.Blog).Include(p => p.Comments);
        return View(posts.ToList());
    }
...
}