The view 'Index' or its master was not found. The following locations were searched:
~/Views/ControllerName/Index.aspx
~/Views/ControllerName/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
使用ASP.Net mvc区域时出现此错误。调用区域控制器操作,但它似乎在“基础”项目视图中而不是在区域视图文件夹中查找视图。
答案 0 :(得分:52)
您需要做的是为您的区域名称设置一个标记:
例如:
context.MapRoute(
"SomeArea_default",
"SomeArea/{controller}/{action}/{id}",
new { controller = "SomeController", action = "Index", id = UrlParameter.Optional }
).DataTokens.Add("area", "YOURAREANAME");
答案 1 :(得分:28)
引发此错误的原因是您的Controller方法名称与View的名称不同。
如果你右键单击你的控制器方法并选择Go To View(Ctrl + M,Ctrl + G),它将打开一个View(成功)或抱怨它找不到一个(你看到的是什么) )。
return view("viewName")
。答案 2 :(得分:14)
Global.asax文件包含URL路由。 像这样的默认URL路由。
"{controller}/{action}/{id}"
所以,试试这个。
<强> 1。右键单击您的控制器方法,如下所示。
<强> 2。单击添加视图..并给出相应的名称。在此示例中,名称应为索引。
然后,它将通过创建相关的文件夹结构来添加正确的视图。
答案 3 :(得分:10)
检查 MyArea AreaRegistration.cs中生成的代码,并确保将控制器参数设置为默认控制器,否则控制器将因某种原因被称为bot,ASP.NET MVC将不会在区域文件夹中搜索视图
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"SomeArea_default",
"SomeArea/{controller}/{action}/{id}",
new { controller = "SomeController", action = "Index", id = UrlParameter.Optional }
);
}
答案 4 :(得分:5)
如果仅在部署到Web服务器时发生此错误,则问题可能是因为未正确部署视图。
如果将视图的构建操作设置为“无”而不是“内容”,则会发生这种情况的示例。
检查视图是否正确部署的方法是导航到Web服务器上站点的物理路径,并确认视图是否存在。
答案 5 :(得分:4)
问题在于我使用MvcRoute.MappUrl
中的MvcContrib
来context.Routes
路由。
似乎MvcContrib
路由映射器对区域路由感到不舒服。
答案 6 :(得分:3)
您很可能没有创建自己的视图引擎
默认视图引擎会在~/Views/[Controller]/
和~/Views/Shared/
中查找视图。
您需要创建自己的视图引擎,以确保在区域视图文件夹中搜索视图。
看看Phil Haack的this post。
答案 7 :(得分:2)
index()
方法goto view
如果此操作打开index.cshtml?
您的问题是IIS池无权访问视图的物理路径。
你可以通过授权来测试它。例如: - 转到c:\inetpub\wwwroot\yourweb
然后右键单击yourweb文件夹 - &gt;属性 - &gt;安全性并为每个人添加组名,并允许对您的站点进行完全控制。希望这能解决你的问题。
答案 8 :(得分:1)
在最终版本中仍然存在问题..当您从上下文菜单/添加/区域创建区域时,visual studio不要将Controller放在MapRoute方法的最后一个参数中。你需要照顾它,在我的情况下,我必须在每次创建一个新区域时手动放置它。
答案 9 :(得分:1)
今天我遇到了这个问题,一个简单的开箱即用的VS 2013 MVC 5项目手动部署到我在Windows 8上的IIS本地实例。事实证明,正在使用的App Pool没有对应用程序的正确访问权限(文件夹等)。重置我的应用程序池标识后,它运行正常。
答案 10 :(得分:0)
我将viewlocationformat添加到RazorViewEngine并为我工作。
ViewLocationFormats = new[] {
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
"~/Areas/Admin/Views/{1}/{0}.cshtml",
"~/Areas/Admin/Views/Shared/{0}.cshtml"
};
答案 11 :(得分:0)
在项目内部的Application_Start()
方法中添加以下代码:
ViewEngines.Engines.Add(new RazorViewEngine());
答案 12 :(得分:0)
我在这里遇到了同样的问题,猜猜是什么....看看csproj的xml'结构,我注意到Content节点(在ItemGroup节点内)是“none”...不知道为什么但是那是我之所以得到同样的错误,只是将其编辑为“内容”作为其他错误,并且它正在发挥作用。
希望有所帮助
答案 13 :(得分:0)
如果您的MSI安装程序无法实际部署文件,则此错误也会浮出水面。
在我的情况下发生这种情况是因为我将.aspx文件转换为.cshtml文件,而visual studio认为这些是全新的文件,并将构建操作设置为none而不是内容。
答案 14 :(得分:0)
我也遇到过这个问题;我注意到我错过了将视图页面包含在名称与控制器相同的文件夹中。
控制器:adminController 视图 - &GT;管理 - &GT; view1.cshtml
(这是View-&gt; view1.cshtml)(没有文件夹:Admin)
答案 15 :(得分:0)
如果您的区域注册中所有正确的MapRoutes都可以得到此错误,并且所有其他基本配置都可以。
情况如此:
我使用了Jquery文件中的下面提到的代码来回发数据,然后从控制器操作方法加载一个视图。
$.post("/Customers/ReturnRetailOnlySales", {petKey: '<%: Model.PetKey %>'});
在jQuery代码之上我没有提到成功回调函数。 发生了什么事情是在完成动作方法的回发场景后,没有路由到我的预期视图,它返回到Jquery方面,并给出了上面没有找到错误的错误。
然后我提供了一个类似下面的解决方案,并且它没有任何问题。
$.post("/Customers/ReturnRetailOnlySales", {petKey: '<%: Model.PetKey %>'},
function (data) {
var url = Sys.Url.route('PetDetail', { action: "ReturnRetailOnlySalesItems", controller: "Customers",petKey: '<%: Model.PetKey %>'});
window.location = url;});
注意:我在成功回调函数中将我的请求发送到我预期的视图操作方法。然后查看引擎找到相关区域的视图文件并正确加载。
答案 16 :(得分:0)
即使您的区域注册中包含所有正确的MapRoutes,也可能会出现此错误。尝试将此行添加到控制器操作中:
If Not ControllerContext.RouteData.DataTokens.ContainsKey("area") Then
ControllerContext.RouteData.DataTokens.Add("area", "MyAreaName")
End If