未找到视图或其主视图或视图引擎不支持搜索的位置

时间:2013-08-16 12:32:18

标签: asp.net-mvc-4

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

  

〜/查看/我的账户/ 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 }
            );
        }
    }

14 个答案:

答案 0 :(得分:91)

如果模型类型为String ,请注意,因为View的第二个参数(字符串,字符串)是masterName,不是模型。您可能需要使用object(model)作为第二个参数调用重载:

不正确:

CREATE TRIGGER AccountChange
ON dbo.Customer
AFTER UPDATE
AS
BEGIN
    UPDATE dbo.Customer 
    SET AccountTypeID = 8 
    FROM Inserted i
    INNER JOIN Deleted d ON i.AccountId = d.AccountId  -- use the primary key here
    WHERE AccountNumber = i.AccountNumber
      AND i.TotalSales BETWEEN 0 AND 5000
      AND i.TotalSales <> d.TotalSales  -- TotalSales was updated
      AND dbo.Customer.AccountId = i.AccountId   -- use the PK here
END

正确:

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

OR(由bradlis7提供):

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

答案 1 :(得分:28)

<强>问题:

在默认位置找不到您的View

<强>解释

视图应位于名为Controller的文件夹中或Shared文件夹中。

<强>解决方案:

View移至MyAccount文件夹或创建HomeController

<强>备选方案:

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

答案 2 :(得分:13)

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

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

用于路由的惯例是将Controller与名称类似于ControllerNameController的类匹配,即controller="MyAccount"表示查找名为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:您的视图文件。

答案 3 :(得分:7)

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

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

答案 4 :(得分:3)

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

echo (Request::getPathInfo() . (Request::getQueryString() ? ('?' . Request::getQueryString()) : '');

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

答案 5 :(得分:3)

这可能是权限问题。

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

答案 6 :(得分:2)

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

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

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

:(

答案 9 :(得分:0)

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

  

解决方法是...我将“客户视图”重命名为“ Customer1”,   刚刚创建了一个新视图并将其命名为Customer ....然后我就复制了   将Customer1代码转换成Customer。

这行得通。

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

更新 只是为了咧嘴笑。。。我回过头来再次复制了所有重命名方案。。。没有出现任何错误。

答案 10 :(得分: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();
}

答案 11 :(得分:0)

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

答案 12 :(得分:0)

由于语句关闭不正确,我遇到了此错误

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

{

} //此花括号需要在最后关闭。

在Index.cshtml视图文件中。我没有在程序结尾处关闭该语句。相反,我最终关闭不当并遇到此错误。

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

答案 13 :(得分:0)

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

enter image description here

但是当我单击Index.cshtml时,出现此错误:

enter image description here

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