MVC 3 CookieTempDataProvider 和 Ninject IOC

发布于 2024-11-01 08:43:17 字数 1361 浏览 0 评论 0原文

我正在尝试在 MVC 3 futures 程序集中使用 CookieTempDataProvider。我相信我已经使用 ninject 成功“连接”了它。下面是我的 app_start.cs 文件中的代码:

[程序集:WebActivator.PreApplicationStartMethod(typeof(Web.AppStart), "Start")] 命名空间网络{ 公共静态类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 类需要启用会话状态。

我一定错过了一些东西,但我不知道它是什么。任何帮助将不胜感激。

非常感谢

I am trying to use the CookieTempDataProvider in MVC 3 futures assembly. I believe I have "wired" it up successfully using ninject. Below is the code from my app_start.cs file:

[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;
        }
    }

However, when I access my page that uses TempData, I get the this error indicating that it is still trying to use the SessionTempDataProvider:

Server Error in '/' Application.
The SessionStateTempDataProvider class requires session state to be enabled.
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.InvalidOperationException: The SessionStateTempDataProvider class requires session state to be enabled.

I must be missing something and I can't figure out what it is. Any help would be most appreciated.

Many Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦在夏天 2024-11-08 08:43:17

我只能让它与 BaseController 方法一起工作。控制器创建过程不会向 Ninject 请求 ITempDataProvider。

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

I've only been able to get this to work with the BaseController approach. The controller creation processes does't ask Ninject for a ITempDataProvider.

public class BaseController : Controller
{
    protected override ITempDataProvider CreateTempDataProvider()
    {
        return new CookieTempDataProvider(HttpContext);
    }
}
¢蛋碎的人ぎ生 2024-11-08 08:43:17
  1. 扩展控制器类

    public static void SetMessage(此控制器控制器,字符串消息)
    {
        控制器.TempData["消息"] = 消息;
    }
    
  2. 然后你可以像这样使用它:

    public ActionResult Save()
    {
        //验证... 
    
        保存(Foo);
        this.SetMessage("项目保存成功");
        返回重定向(“/站点”); 
    }
    
  3. 没有第三个:)

  1. Extend the controller class

    public static void SetMessage(this Controller controller, String message)
    {
        controller.TempData["Messag"] = message;
    }
    
  2. Then you can use it like this:

    public ActionResult Save()
    {
        //Validation... 
    
        Save(Foo);
        this.SetMessage("Item saved successfully");
        return Redirect("/Site"); 
    }
    
  3. No number three :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文