2012-08-23 32 views
3

我需要渲染一個字符串的局部視圖,所以我可以渲染一個Razor語法部分視圖到一個Asp.net視圖。該過程的一部分涉及獲得視圖引擎找到的觀點:RazorViewEngine.FindPartialView useCache。它有什麼作用?

var engine = 
    ViewEngines.Engines 
     .OfType<RazorViewEngine>() 
     .SingleOrDefault(); 
if(engine == null)throw new Exception("no razor viewengine"); 
//useCache is the last parameter in the invocation below 
var viewResult = engine 
    .FindPartialView(htmlHelper.ViewContext, viewName, false); 

如果我設置了useCache參數true(即我不想在虛擬路徑提供給每一個我提出要求的時間進行搜索),視圖不再被發現。我會預料到,如果它沒有通過緩存找到,我們會回退到非緩存方法。

我的期望錯了嗎?這與混合ViewEngines有關嗎?

進一步混淆我,如果我們簡單地要求ViewEngine.Engines收集找到的觀點,我們沒有給出useCache參數:

var viewResult = 
    ViewEngines 
     .Engines 
     .FindPartialView(htmlHelper.ViewContext, viewName); 

我想我會用這個FTTB去,但它迴避了問題...爲什麼這種差異?

回答

3

FindViewFindPartialView方法由ASP.NET MVC框架在內部調用useCache=true第一,然後useCache=false如果沒有找到。你可以嘗試做同樣的事情。

進一步混淆我,如果我們簡單地問了ViewEngine.Engines 收集找到的觀點,我們沒有給出useCache將參數:

這是因爲這個方法做什麼,我前面解釋。

+0

Grand。這使得它看起來更明智。現在我只是自己絆倒MVC代碼。 – spender

+0

好的。 ViewEngines.Engines.FindPartialView的實現清除了一切。謝謝@Darin。 – spender

+1

我查看了反編譯的源代碼,但似乎無法訪問'useCache'參數來強制阻止緩存。如何通過'ViewEngines.Engines'訪問'useCache'參數? –

相關問題