Is it possible to determine if a specific view name exists from within a controller before rendering the view?
I have a requirement to dynamically determine the name of the view to render. If a view exists with that name then I need to render that view. If there is no view by the custom name then I need to render a default view.
I'd like to do something similar to the following code within my controller:
public ActionResult Index() { var name = SomeMethodToGetViewName(); // The 'ViewExists' method is what I've been unable to find. if (ViewExists(name)) { retun View(name); } else { return View(); } }
On basis of data transfer mechanism ASP.NET MVC views are categorized as two types, Dynamic view. Strongly typed view.
A view renders the appropriate UI by using the data that is passed to it from the controller. This data is passed to a view from a controller action method by using the View method. Note. The Views folder is the recommended location for views in the MVC Web project structure.
private bool ViewExists(string name) { ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null); return (result.View != null); }
For those looking for a copy/paste extension method:
public static class ControllerExtensions { public static bool ViewExists(this Controller controller, string name) { ViewEngineResult result = ViewEngines.Engines.FindView(controller.ControllerContext, name, null); return (result.View != null); } }
What about trying something like the following assuming you are using only one view engine:
bool viewExists = ViewEngines.Engines[0].FindView(ControllerContext, "ViewName", "MasterName", false) != null;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With