0

MVC 3 フューチャー アセンブリで CookieTempDataProvider を使用しようとしています。ninjectを使用して正常に「配線」したと思います。以下は、私の app_start.cs ファイルのコードです。

[アセンブリ: WebActivator.PreApplicationStartMethod(typeof(Web.AppStart), "Start")] 名前空間 Web { public static class AppStart { public static void RegisterServices(IKernel カーネル) {

        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 クラスでは、セッション状態を有効にする必要があります。

私は何かが欠けているに違いなく、それが何であるかを理解できません。どんな助けでも大歓迎です。

どうもありがとう

4

2 に答える 2

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. ナンバー3なし:)

于 2013-06-30T16:15:04.257 に答える
0

これを BaseController アプローチでのみ機能させることができました。コントローラーの作成プロセスでは、Ninject に ITempDataProvider を要求しません。

public class BaseController : Controller
{
    protected override ITempDataProvider CreateTempDataProvider()
    {
        return new CookieTempDataProvider(HttpContext);
    }
}
于 2011-07-01T04:45:13.230 に答える