我正在尝试在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类要求启用会话状态。
我必须遗漏一些东西,我无法弄清楚它是什么。任何帮助都将非常感激。
非常感谢
答案 0 :(得分:0)
我只能使用BaseController方法。控制器创建过程不会向Ninject询问ITempDataProvider。
public class BaseController : Controller
{
protected override ITempDataProvider CreateTempDataProvider()
{
return new CookieTempDataProvider(HttpContext);
}
}
答案 1 :(得分:0)
扩展控制器类
public static void SetMessage(this Controller controller, String message)
{
controller.TempData["Messag"] = message;
}
然后你可以像这样使用它:
public ActionResult Save()
{
//Validation...
Save(Foo);
this.SetMessage("Item saved successfully");
return Redirect("/Site");
}
没有三号:)