The view or its master was not found or no view engine supports the searched locations

asp.net Mvc-4

asp.net Mvc-4 Problem Overview


Error like:The view 'LoginRegister' or its master was not found or no view engine supports the searched locations. The following locations were searched:

> ~/Views/MyAccount/LoginRegister.aspx > > ~/Views/MyAccount/LoginRegister.ascx > > ~/Views/Shared/LoginRegister.aspx > > ~/Views/Shared/LoginRegister.ascx > > ~/Views/MyAccount/LoginRegister.cshtml > > ~/Views/MyAccount/LoginRegister.vbhtml > > ~/Views/Shared/LoginRegister.cshtml > > ~/Views/Shared/LoginRegister.vbhtml

Actually my page view page is ~/Views/home/LoginRegister.cshtml so what i do

and my RouteConfig is

 public class RouteConfig
    {

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "MyAccount", action = "LoginRegister", id = UrlParameter.Optional }
            );
        }
    }

asp.net Mvc-4 Solutions


Solution 1 - asp.net Mvc-4

Be careful if your model type is String because the second parameter of View(string, string) is masterName, not model. You may need to call the overload with object(model) as the second parameter:

Not correct :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",msg);
}

Correct :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",(object)msg);
}

OR (provided by bradlis7):

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}

Solution 2 - asp.net Mvc-4

Problem:

Your View cannot be found in default locations.

Explanation:

Views should be in the same folder named as the Controller or in the Shared folder.

Solution:

Either move your View to the MyAccount folder or create a HomeController.

Alternatives:

If you don't want to move your View or create a new Controller you can check at this link.

Solution 3 - asp.net Mvc-4

In Microsoft ASP.net MVC, the routing engine, which is used to parse incoming and outgoing URL Combinations, is designed with the idea of Convention over Configuration. What this means is that if you follow the Convention (rules) that the routing engine uses, you don't have to change the Configuration.

The routing engine for ASP.net MVC does not serve web pages (.cshtml). It provides a way for a URL to be handled by a Class in your code, which can render text/html to the output stream, or parse and serve the .cshtml files in a consistent manner using Convention.

The Convention which is used for routing is to match a Controller to a Class with a name similar to ControllerNameController i.e. controller="MyAccount" means find class named MyAccountController. Next comes the action, which is mapped to a function within the Controller Class, which usually returns an ActionResult. i.e. action="LoginRegister" will look for a function public ActionResult LoginRegister(){} in the controller's class. This function may return a View() which would be by Convention named LoginRegister.cshtml and would be stored in the /Views/MyAccount/ folder.

To summarize, you would have the following code:

/Controllers/MyAccountController.cs:

public class MyAccountController : Controller 
{
    public ActionResult LoginRegister()
    {
        return View();
    }
}

/Views/MyAccount/LoginRegister.cshtml: Your view file.

Solution 4 - asp.net Mvc-4

In your LoginRegister action when returning the view, do below, i know this can be done in mvc 5, im not sure if in mvc 4 also.

 public ActionResult Index()
 {
     return View("~/Views/home/LoginRegister.cshtml");
 }

Solution 5 - asp.net Mvc-4

Check the build action of your view (.cshtml file) It should be set to content. In some cases, I have seen that the build action was set to None (by mistake) and this particular view was not deploy on the target machine even though you see that view present in visual studio project file under valid folder

Solution 6 - asp.net Mvc-4

This could be a permissions issue.

I had the same issue recently. As a test, I created a simple hello.html page. When I tried loading it, I got an error message regarding permissions. Once I fixed the permissions issue in the root web folder, both the html page and the MVC rendering issues were resolved.

Solution 7 - asp.net Mvc-4

Check whether the View (.ASPX File) that you have created is having the same name as mentioned in the Controller. For e.g:

 public ActionResult GetView()
 {
    return View("MyView");
 }

In this case, the aspx file should be having the name MyView.aspx instead of GetView.aspx

Solution 8 - asp.net Mvc-4

I got this error because I renamed my View (and POST action).

Finally I found that I forgot to rename BOTH GET and POST actions to new name.

Solution : Rename both GET and POST actions to match the View name.

Solution 9 - asp.net Mvc-4

If the problem happens intermittently in production, it could be due to an action method getting interrupted. For example, during a POST operation involving a large file upload, the user closes the browser window before the upload completes. In this case, the action method may throw a null reference exception resulting from a null model or view object. A solution would be to wrap the method body in a try/catch and return null. Like this:

[HttpPost]
public ActionResult Post(...)
{
    try
    {
        ...
    }
    catch (NullReferenceException ex)  // could happen if POST is interrupted
    {
        // perhaps log a warning here
        return null;
    }

    return View(model);
}

Solution 10 - asp.net Mvc-4

I had this same issue. I had copied a view "Movie" and renamed it "Customer" accordingly. I also did the same with the models and the controllers.

> The resolution was this...I rename the Customer View to Customer1 and > just created a new view and called it Customer....I then just copied > the Customer1 code into Customer.

This worked.

I would love to know the real cause of the problem.

UPDATE Just for grins....I went back and replicated all the renaming scenario again...and did not get any errors.

Solution 11 - asp.net Mvc-4

I came across this error due to the improper closing of the statement,

@using (Html.BeginForm("DeleteSelected", "Employee", FormMethod.Post))

{

} //This curly bracket needed to be closed at the end.

In Index.cshtml view file.I didn't close the statement at the end of the program. instead, I ended up closing improperly and ran into this error.

I was sure there isn't a need of checking Controller ActionMethod code because I have returned the Controller method properly to the View. So It has to be the view that's not responding and met with similar Error.

Solution 12 - asp.net Mvc-4

If you've checked all the things from the above answers (which are common mistakes) and you're sure that your view is at the location in the exceptions, then you may need to restart Visual Studio.

:(

Solution 13 - asp.net Mvc-4

In my case, I needed to use RedirectToAction to solve the problem.

[HttpGet]
[ControleDeAcessoAuthorize("Report/ExportToPDF")]
public ActionResult ExportToPDF(int id, string month, string output)
{
	try
	{
		// Validate
		if (output != "PDF")
		{
			throw new Exception("Invalid output.");
		}
		else
		{
			...// code to generate report in PDF format
		}
	}
	catch (Exception ex)
	{
		return RedirectToAction("Error");
	}
}

[ControleDeAcessoAuthorize("Report/Error")]
public ActionResult Error()
{
	return View();
}

Solution 14 - asp.net Mvc-4

I ran into this a while ago and it drove me crazy because it turned out to be simple. So within my View I was using a grid control that obtained data for the grid via an http request. Once the middle tier completed my request and returned the dataset, I received the same error. Turns out my return statement was 'return View(dataset);' instead of 'return Json(dataset);

Solution 15 - asp.net Mvc-4

I couldn't find any solution to this problem, until I found out the files didn't exist! This took me a long time to figure out, because the Solution Explorer shows the files!

enter image description here

But when I click on Index.cshtml I get this error:

enter image description here

So that was the reason for this error to show. I hope this answer helps somebody.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser2564537View Question on Stackoverflow
Solution 1 - asp.net Mvc-4NigrimmistView Answer on Stackoverflow
Solution 2 - asp.net Mvc-4glautrouView Answer on Stackoverflow
Solution 3 - asp.net Mvc-4ClaiesView Answer on Stackoverflow
Solution 4 - asp.net Mvc-4dansasu11View Answer on Stackoverflow
Solution 5 - asp.net Mvc-4KapilView Answer on Stackoverflow
Solution 6 - asp.net Mvc-4lipidfishView Answer on Stackoverflow
Solution 7 - asp.net Mvc-4Manoj CMView Answer on Stackoverflow
Solution 8 - asp.net Mvc-4Saeed MousaviView Answer on Stackoverflow
Solution 9 - asp.net Mvc-4Tawab WakilView Answer on Stackoverflow
Solution 10 - asp.net Mvc-4Chris CatignaniView Answer on Stackoverflow
Solution 11 - asp.net Mvc-4Abhishek DuppatiView Answer on Stackoverflow
Solution 12 - asp.net Mvc-4JDandChipsView Answer on Stackoverflow
Solution 13 - asp.net Mvc-4GenivanView Answer on Stackoverflow
Solution 14 - asp.net Mvc-4indianapolymathView Answer on Stackoverflow
Solution 15 - asp.net Mvc-4CerveserView Answer on Stackoverflow