2012-02-15 206 views
53

我对ASP.Net MVC完全陌生。我刚刚在Visual Studio 2010中创建了一个MVC3项目。视图引擎是剃须刀。当我刚刚运行应用程序时,它在浏览器中给出了正确的结果。网址是http://localhost:4163/。然后,我将“Set as Start Page”设置为〜\ Views \ Home文件夹中的Index.cshtml。然后,当我运行该应用程序的URL变成http://localhost:4148/Views/Home/Index.cshtml,它表示无法找到资源。我该怎么做才能纠正它? url映射在哪里完成?ASP.Net MVC - 资源找不到错误

Global.asax文件:

using System.Web.Mvc; 
using System.Web.Routing; 

namespace TEST 
{ 

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 
    } 
} 
+1

发布您的global.asax文件。包括该方法public static void RegisterRoutes(RouteCollection routes) – Yorgo 2012-02-15 12:55:50

+1

右键单击您的项目>属性。在StartAction部分的web选项卡中设置StartUrl – Yorgo 2012-02-15 12:58:39

+1

你知道你有不同的端口吗? (从你的代码)设置你的端口到特定的端口,你不应该有问题:) ::你的默认网址应该是:“Home/Index” – cpoDesign 2012-02-15 13:21:41

回答

88

URL映射或“路由”由ASP.NET MVC站点的根目录中的Global.asax处理。

当您单击“设为起始页”时,它将更改项目设置以查找与该应用程序根相关的文件。但在MVC中,默认路由到您的索引页实际上是http://localhost:4163/Home/Index - 阅读类似this的东西,以了解路由如何工作。

到现在“修复”项目,它的尝试(和失败)导航到该视图直接,右键单击该项目,然后选择“Properties”,点击“Web”选项卡,然后选择“Specific Page”,留下的文字框空白。现在,当您开始调试时,应该再次进入主页 - 查看默认路由参数,以了解Global.asax中的RegisterRoutes方法的原因

+1

感谢您这....我安装一个空的MVC应用程序,我不得不手动添加的东西。这固定了我最后的错误。 – BoundForGlory 2016-04-28 15:20:29

1

那么你不能设置在asp.net mvc的默认页面。
转到global.asax.cs并查看路由的定义。默认路由指向Index方法HomeController。
我会更好地观看一些关于asp.net mvc的短片,或者试着找到nerd dinner tutorial,这会让你很快熟悉这个框架。

我想教程的最佳答案为这个问题的答案已经提供:

ASP.NET MVC Quick Tutorials

+0

谢谢...你能列出最好的教程吗?我会看看书呆子晚餐教程。另外,你是否认为“设置为起始页”功能不应该用于MVC项目? – Lijo 2012-02-15 13:02:39

+1

是的!不要在MVC项目中使用该功能 - 它不起作用。而是在Global.asax文件中指定默认路由的参数默认值。 – greg84 2012-02-15 13:14:08

0

asp.net的MVC项目的开始页面是“当前页” defaulty。只需打开一个服务器端文件并启动项目。通过这种方式,mvc打开作为项目主控制器的默认控制器

+0

你能解释一下“服务器端文件”是什么意思吗? – Lijo 2012-02-15 13:07:31

+1

像HomeController.cs – Yorgo 2012-02-15 13:14:58

0

您可以更改项目属性(项目 - >项目属性)中的起始页面。在网页标签下,您可以选择specify page并将您的首页更改为home/home/index。这将根据您的路线将您引导到适当的页面。 http://localhost:4148/Views/Home/Index.cshtml的地址无法正常工作,因为它正根据您的路由进行处理,该路由指出url需要为http://localhost:4148/ {controller}/{action}和一个可选的/ {id}。

如果您想了解更多关于路由看看here.

2

在“设置为起始页” asp.net的MVC不能使用选项,因为MVC的观点是不是独立的,像Web窗体页。它只是用于显示模型的模板文件。他们没有处理http模块。所有的Web请求都应该通过控制器操作,您不能直接请求视图。

23

确保在控制器文件夹中创建了HomeController.cs类。

+2

这是我的问题,我有一个“默认”控制器,所以我将controller =“Home”更改为controller =“Default”,并在此之后生效。 – M3NTA7 2013-11-11 03:27:39

1

前段时间我在使用VS 2012时遇到了类似的问题。 通过单击Build> Rebuild重建应用程序来解决。

0

要查看您查看这样的:

http://localhost:1234/x/MyView 

在xController.cs文件,控制器文件夹下,

确保您添加这样一个ActionResult方法:

public ActionResult MyView() 
{ 
    return View(whatever); 
} 

当我没有正确引用我的型号名称时,我也收到了此消息:

@u (Html.BeginForm(“MyView”,“MyModel”,FormMethod.Get))

1

如果您使用的是IIS Express。这可能是因为你打开了另一个使用相同虚拟目录的项目。当你打开第二个解决方案VS将该IIS目录重新映射到另一个位置。因此,它不会适用于不同的问题。我有同样的错误作为主题首发。

解决方法:关闭VS Studio的所有实例。打开VS你正在工作的项目&重建。

+0

这个答案让我想到了我的解决方案。我将一个项目复制到一个新的解决方案中,由于与OP相同的错误,我无法使其工作。我查看了IIS Express使用的applicationhost.config文件,发现它具有带有相同网站名称和(1)的额外记录。我删除了.vs文件夹。清洁和重建。然后它工作。它可能只会删除项目中的applicationhost.config而不是整个.vs文件夹。 – Soenhay 2017-02-05 01:12:34

1

只需在此处添加此项 - 如果有人遇到问题,主控制器上的索引页不再加载,可能是因为您尚未设置启动项目。右键单击您希望应用程序启动的项目并将其设置为启动项目,并且应该很好。

9

在我遇到的类似问题中,我的Action有一个HTTP“POST”属性,但我试图打开该页面(默认为“GET”)。所以我不得不创建一个HTTP“GET”版本。

5

按照以下步骤运行你的asp.net mvc应用程序。

  • 控制器创建
    右键单击控制器文件夹并添加控制器。 注 - 不要删除控制器后缀。它的ASP.NET MVC约定。
    为控制器命名为“DemoController”,您可以在“DemoController”中看到“Index”操作。当您创建控制器时,“索引”是默认动作。

  • 视图创建
    的“指数”行动名字上点击右键,并保持 默认视图名称即“指数”,并点击“添加”按钮。

  • 路由设置
    打开Global.asax文件,然后你会看到路线 的默认设置被映射到“家”控制器和“索引”的行动改变为“演示” 控制器和“索引”行动。 URL映射写入Global.asax 文件中。当你打开全球。ASAX文件,那么你会看到如下设置:

    routes.MapRoute(
         "Default", // Route name 
         "{controller}/{action}/{id}", // URL with parameters 
         new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
        ); 
    

    更改成:

    routes.MapRoute(
         "Default", // Route name 
         "{controller}/{action}/{id}", // URL with parameters 
         new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
        ); 
    

和运行应用程序,你可以看到工作中的应用程序。

在浏览器输入的地址栏这样
0

: ControllerName/ActionMethod 不输入ControllerName/VIEWNAME 例如 在地址栏:http://localhost:55029/test2/getview CSHTML文件代码:

@{ 
Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
<title>MyView</title> 
</head> 
<body> 
<div>    
</div> 
</body> 
</html> 

和CS文件的代码:

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

如果你已经尝试了所有上述解决方案,问题仍然存在,那么使用这个简单的lution。 打开从这个link的调试器,键入页面url并点击获取新的Scrape信息按钮。这将解决您的问题。

背后的原因(我认为)是Facebook的API API保存页面的当前状态,并显示自己的服务器。如果您在编码时单击共享按钮,并且您的页面实际上未上传,则Facebook api无法在服务器上找到该页面,并将页面状态保存为“找不到资源”。即使在您上传页面后,它仍然会显示相同的信息。当您从Facebook调试器获取页面时,它会从头开始解决所有问题并保存页面的当前状态,然后您的分享按钮开始工作,而不会对编码进行任何更改。

-2

通过右键单击我想要的启动页面的视图解决了这个问题。显示错误“找不到您正在寻找的资源”只需右键单击您的项目,进入Web并选择当前页面。这将解决这个问题

6

我也得到了相同的HTML-404错误:

The resource cannot be found.Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

但仔细检查后,我发现我已经离开了控制器Default1Controller的名称,而不是改变它的到HomeController 。当我做出改变并调试了它的工作。希望它会帮助你,如果你有同样的问题。

0

我有同样的排序问题,除了我没有使用该名称Index.cshtmlView,我把它例如LandingPage.cshtml,我的问题是,在我的控制器的ActionResult是不一样的名字我的视图名称(在这种情况下,我的ActionResult被称为Index()) - 这实际上是显而易见的,从我的角度来看这是一个愚蠢的错误,但是对于MVC来说是新的,所以我将在这里和那里基本失败。

所以在我的情况下,我需要改变我的ActionResult是相同的名称,我ViewLandingPage.cshtml

public ActionResult LandingPage() 
    { 
     ProjectDetailsViewModels PD = new ProjectDetailsViewModels(); 
     List<ProjectDetail> PDList = new List<ProjectDetail>(); 

     PDList = GetProductList(); 
     PD.Projectmodel = PDList; 


     return View(PD); 
    } 

我是新来的MVC,也许这将帮助别人谁是新的,而疲于应付我也做过同样的事情。

1

(MVC 5):更改RouteConfig.cs包括两个routes这样的:

  routes.MapRoute(
      name: "DefaultWithLanguage", 
      url: "{language}/{controller}/{action}/{id}", 
      defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      constraints: new {language= "[a-z]{2}"} 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

没有指定路线的语言部分,所以当它没有搞错控制器名称这不符合规则运算"[a-z]{2}"并取代默认语言,并重定向到其余路由...

2

令人难以置信的是,我不小心从控制器中删除了公开关键字!

enter image description here

我想这将有助于精确没有其他人,但你永远不知道...

+2

你错了。 – wannabeLearner 2017-03-21 10:14:46

0

对我来说,问题是由一个命名空间的问题引起的。

我已经将我的项目名称空间从MyProject更新到MyProject.Web,但我忘记了更新项目属性>>默认名称空间。因此,当我添加一个新的控制器时,它使用旧的命名空间。我所要做的只是纠正新控制器中的命名空间,并且它工作正常。

相关问题