我有一个使用 Asp.net MVC2 的网络应用程序。我将其升级为 MVC 3 ,现在我发现 OutputCache 功能不再有效。我创建了一个简单的Test动作,如下所示。
[OutputCache(Duration = 1000000, VaryByParam = "none")]
public virtual ActionResult CacheTest(string name)
{
string message = string.Format("{0}: Time is {1}", name, DateTime.Now.ToLongTimeString());
ViewData.Add("Message", message);
return View();
}
这总是提供当前时间,表明未缓存。我在这里错过了什么吗?
更多信息:如果我创建一个新的Mvc3应用程序,它可以正常工作。它只在升级的应用程序中,我有这个问题。
更新:我也在使用Ninject。如果我停止使用Ninject OutputCache开始工作。
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}.aspx/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterDependencyResolver();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
protected void RegisterDependencyResolver()
{
var kernel = CreateKernel();
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
protected IKernel CreateKernel()
{
return new StandardKernel();
}
}
答案 0 :(得分:6)
在ASP.NET MVC 3中使用Ninject的正确和推荐方法如下:
安装ninject.mvc3
NuGet包。这将确保您获得与ASP.NET MVC 3兼容的最新版本。
安装完成后,会在项目中添加App_Start/NinjectMVC3.cs
文件,并且在RegisterServices
方法中,您将注册Ninject模块:
private static void RegisterServices(IKernel kernel)
{
var modules = new INinjectModule[]
{
// your modules here
};
kernel.Load(modules);
}
从Global.asax中删除所有Ninject特定代码,包括任何NinjectDependencyResolver
。
尝试按照这些步骤操作,也许您的问题会得到解决。