错误如:未找到视图“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 }
);
}
}
答案 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)