我創建了一個簡單的ASP.NET MVC 1.0版應用程序。我有一個ProductController,它有一個操作索引。在該視圖中,我在Product子文件夾下創建了相應的Index.aspx。ASP.NET MVC視圖引擎分辨率序列
然後我引用了Spark dll並在相同的Product view文件夾下創建了Index.spark。在的Application_Start看起來像
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new Spark.Web.Mvc.SparkViewFactory());
ViewEngines.Engines.Add(new WebFormViewEngine());
}
我的期望是,由於默認WebFormViewEngine前的星火引擎註冊,瀏覽產品控制器中的索引操作時,星火引擎應該被使用,WebFormViewEngine應該用於其他所有網址。
但是,測試顯示產品控制器的Index操作也使用WebFormViewEngine。
如果我註釋掉WebFormViewEnginer(代碼中的最後一行)的註冊,我可以看到Index操作由Spark引擎呈現,其餘的urls生成一個錯誤(因爲defualt引擎已經消失),它證明我的所有Spark代碼都是正確的。
現在我的問題是如何解決視圖引擎?爲什麼註冊順序不生效?
總結:刪除文件的Index.aspx會讓Index.spark使用。 – LukLed
我還是不太明白。 ViewLocationFormats在VirtualPathProviderViewEngine中定義,它是特定於視圖引擎的內部實現。 如果ASP.NET MVC已經註冊了多個視圖引擎,它會查詢逐一查看視圖引擎是否可以處理請求。第一個視圖引擎回答是處理請求。在我的情況下,既然Index.aspx和Index.spark在那裏,Spark和WebFormViewEngine都可以處理這個請求。那麼爲什麼WebForViewEngine alwasy優先? – intangible02
@ intangible02:測試和驗證,我通過源挖出,現在有針對的解釋,一起來看看。 – Aaronaught