MVC 3 CookieTempDataProvider和Ninject IOC

时间:2011-04-12 18:39:50

标签: asp.net-mvc asp.net-mvc-3 tempdata

我正在尝试在MVC 3期货装配中使用CookieTempDataProvider。我相信我已经使用ninject成功地“连线”了它。以下是我的app_start.cs文件中的代码:

[assembly:WebActivator.PreApplicationStartMethod(typeof(Web.AppStart),“Start”)] namespace Web {     public static class AppStart {         public static void RegisterServices(IKernel kernel){

        kernel.Bind<ITempDataProvider>().To<CookieTempDataProvider>();
    }

    public static void Start() {
        // Create Ninject DI Kernel 
      //  IKernel kernel = new StandardKernel();
        IKernel kernel = Container;

        // Register services with our Ninject DI Container
        RegisterServices(kernel);

        // Tell ASP.NET MVC 3 to use our Ninject DI Container 
        DependencyResolver.SetResolver(new NinjectServiceLocator(kernel));

    }

    static IKernel _container;
    public static IKernel Container
    {
        get
        {
            if (_container == null)
                _container = new StandardKernel();
            return _container;
        }
    }

但是,当我访问使用TempData的页面时,我收到此错误,表明它仍在尝试使用SessionTempDataProvider:

'/'应用程序中的服务器错误。 SessionStateTempDataProvider类要求启用会话状态。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.InvalidOperationException:SessionStateTempDataProvider类要求启用会话状态。

我必须遗漏一些东西,我无法弄清楚它是什么。任何帮助都将非常感激。

非常感谢

2 个答案:

答案 0 :(得分:0)

我只能使用BaseController方法。控制器创建过程不会向Ninject询问ITempDataProvider。

public class BaseController : Controller
{
    protected override ITempDataProvider CreateTempDataProvider()
    {
        return new CookieTempDataProvider(HttpContext);
    }
}

答案 1 :(得分:0)

  1. 扩展控制器类

    public static void SetMessage(this Controller controller, String message)
    {
        controller.TempData["Messag"] = message;
    }
    
  2. 然后你可以像这样使用它:

    public ActionResult Save()
    {
        //Validation... 
    
        Save(Foo);
        this.SetMessage("Item saved successfully");
        return Redirect("/Site"); 
    }
    
  3. 没有三号:)