没有find视图或主视图,或没有视图引擎支持search的位置
错误如下:未find'LoginRegister'或其主人的视图,或没有视图引擎支持search的位置。 search了以下位置:
〜/查看/我的帐户/ LoginRegister.aspx
〜/查看/我的帐户/ LoginRegister.ascx
〜/查看/共享/ LoginRegister.aspx
〜/查看/共享/ LoginRegister.ascx
〜/查看/我的帐户/ LoginRegister.cshtml
〜/查看/我的帐户/ LoginRegister.vbhtml
〜/查看/共享/ LoginRegister.cshtml
〜/查看/共享/ LoginRegister.vbhtml
其实我的页面查看页面是~/Views/home/LoginRegister.cshtml
所以我做
和我的RouteConfig
是
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 } ); } }
另外, 如果您的模型types是string ,请小心。 因为,第二个参数的视图 – string(主名称),但你可能需要调用对象参数(模型)的第一个构造函数。
不正确 :
protected ActionResult ShowMessageResult(string msg) { return View("Message",msg); }
正确:
protected ActionResult ShowMessageResult(string msg) { return View("Message",(object)msg); }
OR(由bradlis7提供):
protected ActionResult ShowMessageResult(string msg) { return View("Message",model:msg); }
问题:
您的View
不能在默认位置find。
说明:
视图应位于与Controller
相同的文件夹或Shared
文件夹中。
解:
将您的View
移动到MyAccount
文件夹或创build一个HomeController
。
备择scheme:
如果你不想移动你的View
或创build一个新的Controller
你可以检查这个链接 。
在Microsoft ASP.net MVC中,用于parsing传入和传出URL组合的路由引擎的devise思想是“约定优于configuration”。 这意味着如果遵循路由引擎使用的约定(规则),则不必更改configuration。
ASP.net MVC的路由引擎不提供网页(.cshtml)。 它提供了一种方法,让URL由代码中的类来处理,它可以将text / html呈现到输出stream,或者使用Convention以一致的方式parsing和提供.cshtml文件。
用于路由的惯例是将Controller与名称类似于ControllerNameController
的类进行匹配,即controller="MyAccount"
表示find名为MyAccountController
类。 接下来是映射到Controller类中的一个函数,该函数通常返回一个ActionResult
。 即action="LoginRegister"
将在控制器的类中寻找一个函数public ActionResult LoginRegister(){}
。 这个函数可能会返回一个View()
,这个会被名为LoginRegister.cshtml
的会议存储在/Views/MyAccount/
文件夹中。
总而言之,您将拥有以下代码:
/Controllers/MyAccountController.cs:
public class MyAccountController : Controller { public ActionResult LoginRegister() { return View(); } }
/Views/MyAccount/LoginRegister.cshtml:您的视图文件。
在你的LoginRegister操作返回视图的时候,下面做,我知道这个可以在mvc 5中完成,我不知道是否在mvc 4中。
public ActionResult Index() { return View("~/Views/home/LoginRegister.cshtml"); }
检查您创build的View(.ASPX文件)是否与Controller中提到的名称相同。 例如:
public ActionResult GetView() { return View("MyView"); }
在这种情况下,aspx文件应该具有名称MyView.aspx而不是GetView.aspx
这可能是一个权限问题。
我最近有同样的问题。 作为一个testing,我创build了一个简单的hello.html页面。 当我尝试加载它时,我收到了有关权限的错误消息。 一旦我解决了根web文件夹中的权限问题,html页面和MVC渲染问题都解决了。
我得到这个错误,因为我重命名我的视图(和POST操作)。
最后,我发现我忘了把BOTH GET和POST动作重命名为新名称。
解决scheme : 重命名GET和POST操作以匹配视图名称。
如果问题在生产中间歇性地发生,则可能是由于操作方法中断。 例如,在涉及大file upload的POST操作期间,用户在上载完成之前closures浏览器窗口。 在这种情况下,action方法可能会抛出null模型或视图对象导致的空引用exception。 解决方法是将方法体封装在try / catch中,并返回null。 喜欢这个:
[HttpPost] public ActionResult Post(...) { try { ... } catch (NullReferenceException ex) // could happen if POST is interrupted { // perhaps log a warning here return null; } return View(model); }
检查你的视图的构build行为(.cshtml文件)它应该被设置为内容。 在某些情况下,我已经看到生成操作被设置为无(错误),并且这个特定的视图没有被部署在目标机器上,即使你看到有效的文件夹下的Visual Studio项目文件中存在该视图
如果你已经从上面的答案中检查了所有的东西(这是常见的错误),并且确定你的视图位于exception的位置,那么你可能需要重新启动 Visual Studio。
🙁
我的工作有一些政策不能使NuGet工作,结果,我的解决scheme失去了对microsoft.aspnet.mvc DLL的引用。 但是,一旦我手动添加到引用的DLL,我能够呈现该页面。