Calling another different view from the controller using ASP.NET MVC 4

asp.net Mvcasp.net Mvc-4

asp.net Mvc Problem Overview


I have a view (Index.cshtml) with a submit button. When the submit button is clicked, it calls an action (Action01) within the controller (TestController.cs) so at the end of the action I want to return to the caller (Index.cshtml) view with a custom view model as a parameter. How do I do this?

Results after first attempt using View("ViewName",model):

An error is raised, as the action is within the controller Test, so returning, it is searching for \Views\Tests\Index, and my Index page is in \Views\Home\Index.

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

~/Views/Test/Index.aspx
~/Views/Test/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Test/Index.cshtml
~/Views/Test/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

###Final solution:

I have used return View("ViewName", model), and I have changed my directories structure as it was the problem.

asp.net Mvc Solutions


Solution 1 - asp.net Mvc

You can directly return a different view like:

return View("NameOfView", Model);

Or you can make a partial view and can return like:

return PartialView("PartialViewName", Model);

Solution 2 - asp.net Mvc

To return a different view, you can specify the name of the view you want to return and model as follows:

return View("ViewName", yourModel);

if the view is in different folder under Views folder then use below absolute path:

return View("~/Views/FolderName/ViewName.aspx");

Solution 3 - asp.net Mvc

            public ActionResult Index()
            {
                return View();
            }


            public ActionResult Test(string Name)
            {
                return RedirectToAction("Index");
            }

Return View Directly displays your view but

Redirect ToAction Action is performed

Solution 4 - asp.net Mvc

You have to specify the name of the custom view and its related model in Controller Action method.

public ActionResult About()
{            
   return View("NameOfViewYouWantToReturn",Model); 
}

Solution 5 - asp.net Mvc

Also, you can just set the ViewName:

return View("ViewName");

Full controller example:

public ActionResult SomeAction() {
    if (condition)
    {
        return View("CustomView");
    }else{
        return View();
    }
}

This works on MVC 5.

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
QuestionRodriView Question on Stackoverflow
Solution 1 - asp.net MvcNeelView Answer on Stackoverflow
Solution 2 - asp.net MvcJatin patilView Answer on Stackoverflow
Solution 3 - asp.net MvcDiako HasaniView Answer on Stackoverflow
Solution 4 - asp.net MvcRaBzView Answer on Stackoverflow
Solution 5 - asp.net MvcCésar LeónView Answer on Stackoverflow