如何解决MVC 3 CookieTempDataProvider和Ninject IOC
| 我正在尝试在MVC 3期货程序集中使用CookieTempDataProvider。我相信我已经使用ninject成功“连接”了它。以下是我的app_start.cs文件中的代码: [程序集:WebActivator.PreApplicationStartMethod(typeof(Web.AppStart),\“开始\”)] 命名空间Web { 公共静态类AppStart { 公共静态无效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类要求启用会话状态。
我一定想念一些东西,我不知道那是什么。非常感激任何的帮助。
非常感谢
解决方法
我只能使它与BaseController方法一起使用。控制器创建过程不会要求Ninject提供ITempDataProvider。
public class BaseController : Controller
{
protected override ITempDataProvider CreateTempDataProvider()
{
return new CookieTempDataProvider(HttpContext);
}
}
,扩展控制器类
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\");
}
第三名:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。