2011-10-19 10 views
0

私は奇妙な問題に会ったMVCの初心者と今日だ:私はこのような1 action.code上のキャッシュを有効にするには、OutputCacheを使用する:「VaryByParam」プロパティが「なし」ではないことOutputCache属性のサーバーキャッシュバグ?

[OutputCache(Duration=86400,VaryByParam="none")] 
    public ActionResult Index(string id) 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 
     ViewBag.ID = id; 

     return View(); 
    } 

お知らせ、はい、私はサーバーがアクションのための1つのキャッシュを保持したい、どのようなパラメータが渡された。 およびルーティングコードはこれです:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

、私は探検開き、結果は私が望むものではないが、例えば私が入力します。「のhttp:// localhostを:27654 /ホーム/インデックス/ 121212」、 "http:// localhost:27654/home/index/12"に変更し、ページが変更されたことを確認すると、ID "12"が表示されました。

しかし、ページを更新すると(パラ "id"は変更されません)、ページに表示されるdatetimeは変更されませんでした。つまり、asp.netはキャッシュのVaryByを自分のセットではなく "ID" 。 どうしたの?

+0

ます。http:// stackoverflowのあなたも、このトピックを読んで、パラメータにsome

をcange場合は、キャッシュの新しいバージョンが作成されません例をしようとしますので、もし私の例ではstring someは、ルートの一部ではありません.COM /質問/ 2198388 /キャッシング-と-変動バイroutevalue http://stackoverflow.com/questions/4518671/does-varybyparam-also-read-routedata-values – user960567

答えて

1

はい。これは、経路であらかじめ定義されたパラメータ別ページの別の例を作成するためです。

[OutputCache(Duration=86400,VaryByParam="none")] 
    public ActionResult Index(int id, string some) 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 
     ViewBag.ID = id; 
     ViewBag.Some = some; 
     return View(); 
    } 

RouteパラメータはOutputCacheのパラメータとみなすことはできません。 OutputCache Bug with VaryByParam="None" with MVC RC refresh

+0

おかげで、それがどういう意味であなたの例では、 "http:// localhost:27654/home/index?some = wawa"と入力しなければなりません。 – Kaicui

+0

"Http Get"シーン、私はルートパラメータを使うことができません。これは、routes.MapRouteで定義されたパラメータが変更された場合、新しいキャッシュの例が作成されることを意味します。/home/index/1または/ 2はルートパラメータなので、2つのキャッシュ項目になります。 QueryStringパラメータは、キャッシュされたページに影響を与えません。原因はVaryByParam = "none"です。それは意味ですか? –

+0

はい、ありがとうございます〜 – Kaicui