Can I change the search order for the physical vie

2019-05-01 08:28发布

问题:

I noticed Asp.net MVC 3 searches for .aspx files before .cshtml files. Can I change this search order? And how to do this?

Background information

When debugging I got the following exception:

The view 'Reset' or its master was not found. The following locations were searched:
~/Views/Demo/Reset.aspx
~/Views/Demo/Reset.ascx
~/Views/Shared/Reset.aspx
~/Views/Shared/Reset.ascx
~/Views/Demo/Reset.cshtml
~/Views/Demo/Reset.vbhtml
~/Views/Shared/Reset.cshtml
~/Views/Shared/Reset.vbhtml

I conclude from this, that the old .aspx views are searched for first.

Since I converted my site to MVC3, and all views to Razor, I would like the .cshtml files to be searched first. I think this would be better for performance.

回答1:

Yes. Change the order of the existing view engines..

But in a non-debug configuration, file locations are cached, so it will only help on the first lookup. I wouldn't sweat it.



回答2:

Thanks to the answer of Craig Stuntz I found the syntax I was looking for:

I added this to my Application_Start in Global.asax.cs:

    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RazorViewEngine()); 
    // ViewEngines.Engines.Add(new WebFormViewEngine()); <-- uncomment if needed

This clears the registered ViewEngines, and adds them in the order I want.