87

错误如下:未找到视图“LoginRegister”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:

~/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

实际上我的页面浏览页面就是 ~/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 }
            );
        }
    }
4

15 回答 15

117

如果您的模型类型是 String ,请小心,因为 View(string, string) 的第二个参数是 masterName,而不是 model。您可能需要使用 object(model) 作为第二个参数来调用重载:

不正确 :

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

正确的 :

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

或(由 bradlis7 提供):

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}
于 2015-07-06T12:18:10.473 回答
32

问题:

View无法在默认位置找到。

解释:

视图应位于与文件夹中的Controller或命名相同的文件Shared夹中。

解决方案:

将您移动View到该MyAccount文件夹​​或创建一个HomeController.

备择方案:

如果您不想移动您的View或创建一个新的Controller,您可以查看此链接

于 2013-08-16T12:34:09.273 回答
14

在 Microsoft ASP.net MVC 中,用于解析传入和传出 URL 组合的路由引擎是按照约定优于配置的思想设计的。这意味着如果您遵循路由引擎使用的约定(规则),则不必更改配置。

ASP.net MVC 的路由引擎不提供网页 (.cshtml)。它提供了一种由代码中的类处理 URL 的方法,该类可以将 text/html 呈现到输出流,或者使用约定以一致的方式解析和提供 .cshtml 文件。

用于路由的约定是将控制器与名称相似的类匹配ControllerNameControlleriecontroller="MyAccount"意味着找到名为的类MyAccountController。接下来是动作,它被映射到控制器类中的一个函数,该函数通常返回一个ActionResult. ie将在控制器的类中action="LoginRegister"寻找一个函数。public ActionResult LoginRegister(){}此函数可能会返回一个View()按约定命名的LoginRegister.cshtml并将存储在/Views/MyAccount/文件夹中。

总而言之,您将拥有以下代码:

/控制器/MyAccountController.cs:

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

/Views/MyAccount/LoginRegister.cshtml:您的视图文件。

于 2013-08-16T13:13:45.593 回答
9

在返回视图时的 LoginRegister 操作中,请执行以下操作,我知道这可以在 mvc 5 中完成,我不确定是否也在 mvc 4 中。

 public ActionResult Index()
 {
     return View("~/Views/home/LoginRegister.cshtml");
 }
于 2015-08-21T18:10:27.707 回答
5

检查视图的构建操作(.cshtml 文件)它应该设置为内容。在某些情况下,我看到构建操作设置为无(错误地),并且即使您在有效文件夹下的 Visual Studio 项目文件中看到该视图,该特定视图也没有部署在目标机器上

于 2017-05-07T17:23:46.830 回答
3

这可能是权限问题。

我最近有同样的问题。作为测试,我创建了一个简单的 hello.html 页面。当我尝试加载它时,我收到一条有关权限的错误消息。一旦我修复了根 web 文件夹中的权限问题,html 页面和 MVC 渲染问题都得到了解决。

于 2015-08-21T17:46:16.967 回答
2

检查您创建的视图(.ASPX 文件)是否与控制器中提到的名称相同。例如:

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

在这种情况下,aspx 文件的名称应该是 MyView.aspx 而不是 GetView.aspx

于 2015-07-22T07:58:38.627 回答
2

我收到此错误是因为我重命名了我的视图(和 POST 操作)。

最后我发现我忘记将 GET 和 POST 操作重命名为新名称。

解决方案重命名 GET 和 POST 操作以匹配视图名称。

于 2016-02-16T21:25:36.947 回答
1

我有同样的问题。我复制了一个视图“电影”并将其重命名为“客户”。我对模型和控制器也做了同样的事情。

解决方法是……我将客户视图重命名为 Customer1,然后创建了一个新视图并将其命名为客户……然后我将客户 1 代码复制到客户中。

这行得通。

我很想知道问题的真正原因。

更新 只是为了笑容......我回去并再次复制了所有重命名场景......并且没有得到任何错误。

于 2019-04-05T23:44:08.007 回答
1

由于语句关闭不当,我遇到了这个错误,

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

{

} //这个大括号需要在最后关闭。

在Index.cshtml查看文件。我没有在程序结束时关闭语句。相反,我最终关闭不正确并遇到了这个错误。

我确信不需要检查 Controller ActionMethod 代码,因为我已将 Controller 方法正确返回给 View。所以它必须是没有响应并遇到类似错误的视图。

于 2020-03-12T19:54:15.370 回答
1

如果问题在生产中间歇性发生,则可能是由于操作方法被中断。例如,在涉及大文件上传的 POST 操作期间,用户在上传完成之前关闭浏览器窗口。在这种情况下,操作方法可能会抛出由空模型或视图对象导致的空引用异常。一种解决方案是将方法体包装在 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);
}
于 2017-02-10T20:25:00.317 回答
0

如果您已经检查了上述答案中的所有内容(这是常见错误)并且您确定您的视图位于异常中的位置,那么您可能需要重新启动Visual Studio。

:(

于 2015-10-12T10:38:13.827 回答
0

不久前我遇到了这个问题,这让我发疯了,因为事实证明它很简单。因此,在我的视图中,我使用了一个网格控件,该控件通过 http 请求获取网格的数据。中间层完成我的请求并返回数据集后,我收到了同样的错误。原来我的返回语句是'return View(dataset);' 而不是 'return Json(dataset);

于 2019-08-27T11:23:30.213 回答
0

就我而言,我需要使用 RedirectToAction 来解决问题。

[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();
}
于 2019-08-19T13:01:37.157 回答
0

在我发现文件不存在之前,我找不到任何解决此问题的方法!我花了很长时间才弄清楚,因为解决方案资源管理器显示了文件!

在此处输入图像描述

但是当我点击 Index.cshtml 我得到这个错误:

在此处输入图像描述

这就是显示此错误的原因。我希望这个答案对某人有所帮助。

于 2020-12-15T13:41:23.063 回答