我创建了一个简单的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