未找到视图“索引”或其主视图。
Posted
技术标签:
【中文标题】未找到视图“索引”或其主视图。【英文标题】:The view 'Index' or its master was not found. 【发布时间】:2011-01-17 04:10:30 【问题描述】: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 区域时出现此错误。调用了区域控制器操作,但它似乎在“基础”项目视图中查找视图,而不是在区域视图文件夹中。
【问题讨论】:
@çağdaş:它的 ASP.NET MVC2 RC2。 您是否找到了解决此问题的方法,或者您是否只是放弃了 MVCContribs MvcRoute?遇到同样的问题 当时我刚回到“常规”routes.MapRoute()
。但是现在您可以使用完全支持 mvc2 的更新后的 MvcContrib。
谢谢门迪。我再试一次。可能只是我是一个菜鸟错过了一些东西。
【参考方案1】:
您需要做的是为您的区域名称设置一个令牌:
例如:
context.MapRoute(
"SomeArea_default",
"SomeArea/controller/action/id",
new controller = "SomeController", action = "Index", id = UrlParameter.Optional
).DataTokens.Add("area", "YOURAREANAME");
【讨论】:
当它在 MVC4 中为我工作时,找不到足够快的 chrome 标签来支持它 =) 谁能想到?不认真,谁???这个严重晦涩的问题让我停了好几个小时!谢谢@香农 在 MVC4 中为我工作。routes.MapRoute( name: "Default", url: "area/controller/action/id", defaults: new area = "General", controller = "Home", action = "Index", id = UrlParameter.Optional );
还不够。添加DataToken
是必要的。
我尽一切努力使区域工作,这是唯一对我有帮助的答案。
什么是区域和YOURAREANAME?我们在哪里可以找到它?【参考方案2】:
由于您的控制器方法名称与视图名称不同而引发此错误。
如果您右键单击您的控制器方法并选择 Go To View (Ctrl+M,Ctrl+G),它将打开一个视图(成功)或抱怨找不到一个视图(您所看到的)。
-
对应的Controllers和View文件夹名称相同。
相应的控制器方法和视图页面应该具有相同的名称。
如果您的方法名称与视图名称不同,请在方法中使用
return view("viewName")
。
【讨论】:
谢谢。如前所述(bullet #1)Index.cshtml 位于 Views 文件夹根目录中,而它本应位于 Views[ControllerName] 文件夹中。添加子文件夹并将视图放入已修复的错误中。【参考方案3】:Global.asax 文件包含 URL 路由。 像这样的默认 URL 路由。
"controller/action/id"
那么,试试这个。
1.右键单击您的控制器方法,如下所示。
示例:假设我们调用Index()
方法。右键单击它。
2.单击 Add View.. 并给出适当的名称。在此示例中,名称应为 Index。
然后它将通过使用相关文件夹结构创建来添加正确的视图。
【讨论】:
【参考方案4】:在 MyAreaAreaRegistration.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
);
【讨论】:
【参考方案5】:如果仅在部署到 Web 服务器时出现此错误,则问题可能是因为未正确部署视图。
如果视图的构建操作设置为“无”而不是“内容”,则会发生这种情况。
检查视图是否正确部署的一种方法是导航到 Web 服务器上站点的物理路径并确认视图是否存在。
【讨论】:
【参考方案6】:问题是我使用来自MvcContrib
的MvcRoute.MappUrl
来路由context.Routes
。
MvcContrib
路由映射器似乎对区域路由感到不舒服。
【讨论】:
您能否添加有关该问题及其解决方案的更多信息?如果可以,请添加任何代码示例。【参考方案7】:您很可能没有创建自己的视图引擎。
默认视图引擎在~/Views/[Controller]/
和~/Views/Shared/
中查找视图。
您需要创建自己的视图引擎以确保在区域视图文件夹中搜索视图。
看看 Phil Haack 的 this post。
【讨论】:
默认视图引擎不会这样做,因为区域现在是 MVC 核心的一部分。 @Mendy 在这种情况下,也许您没有使用 Global.asax 中的MapAreaRoute
扩展方法注册您的路线?
@çağdaş:MapAreaRoute 似乎在 MVC2 RC2 中被删除。正如我所说,路由很好,因为控制器被正确调用。
来源:dcs-media.com/Archive/…
@Mendy 我没有机会对此进行测试,我在这里进行了疯狂的猜测。但是在注册路线时,您是否需要提供 area
关键字?像这样:routes.MapRoute("Default", "controller/action", new area = "SomeArea", controller = "Home", action = "Index" )
【参考方案8】:
我今天遇到了这个问题,我将一个简单的开箱即用的 VS 2013 MVC 5 项目手动部署到我在 Windows 8 上的本地 IIS 实例。事实证明,正在使用的应用程序池没有正确访问应用程序(文件夹等)。重置我的应用程序池身份后,它工作正常。
【讨论】:
是的,这也是发生在我身上的事情。对于未来的观众来说,首先检查这一点很容易实现。【参考方案9】:-
在您的控制器中右键单击
index()
方法
然后点击goto view
如果此操作打开 index.cshtml?
您的问题是 IIS 池没有权限访问视图的物理路径。
您可以通过授予权限对其进行测试。例如:- 转到c:\inetpub\wwwroot\yourweb
然后右键单击您的网络文件夹-> 属性-> 安全并添加组名每个人并允许完全控制您的站点。希望这可以解决您的问题。
【讨论】:
【参考方案10】:在最终版本中仍然存在问题......当您从上下文菜单/添加/区域创建区域时,Visual Studio 不会将控制器放在 MapRoute 方法的最后一个参数中。你需要照顾它,就我而言,我每次创建新区域时都必须手动放置它。
【讨论】:
【参考方案11】:即使在您的区域注册中使用了所有正确的 MapRoutes,您也可能会收到此错误。尝试将此行添加到您的控制器操作中:
If Not ControllerContext.RouteData.DataTokens.ContainsKey("area") Then
ControllerContext.RouteData.DataTokens.Add("area", "MyAreaName")
End If
【讨论】:
【参考方案12】:如果即使您的区域注册中所有正确的 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;);
注意:我在成功回调函数中将请求发送到我预期的视图操作方法。然后视图引擎找到了相关区域的视图文件并正确加载。
【讨论】:
【参考方案13】:我也遇到过这个问题;我注意到我错过了将视图页面包含在与控制器名称相同的文件夹中。
控制器:adminController 查看->Admin->view1.cshtml
(原来是View->view1.cshtml)(没有文件夹:Admin)
【讨论】:
【参考方案14】:如果您的 MSI 安装程序未能实际部署文件,也会出现此错误。
发生这种情况是因为我将 .aspx 文件转换为 .cshtml 文件,而 Visual Studio 认为这些是全新的文件,并将构建操作设置为 none 而不是 content。
【讨论】:
【参考方案15】:我在这里遇到了同样的问题,你猜怎么着....查看 csproj 的 xml' 结构,我注意到 Content 节点(在 ItemGroup 节点内)为“none”...不知道为什么,但那是我遇到同样错误的原因,只是像其他人一样将其编辑为“内容”,并且它正在工作。
希望有帮助
【讨论】:
【参考方案16】:在您的项目中的Application_Start()
方法中添加以下代码:
ViewEngines.Engines.Add(new RazorViewEngine());
【讨论】:
【参考方案17】:我将 viewlocationformat 添加到 RazorViewEngine 并为我工作。
ViewLocationFormats = new[]
"~/Views/1/0.cshtml",
"~/Views/Shared/0.cshtml",
"~/Areas/Admin/Views/1/0.cshtml",
"~/Areas/Admin/Views/Shared/0.cshtml"
;
【讨论】:
以上是关于未找到视图“索引”或其主视图。的主要内容,如果未能解决你的问题,请参考以下文章