ASP.Net MVC - 资源找不到错误

72
我完全不了解ASP.Net MVC。我刚在Visual Studio 2010中创建了一个MVC3项目,视图引擎是razor。当我运行应用程序时,在浏览器中显示出正确的结果。URL是http://localhost:4163/。然后我将Index.cshtml文件设置为启动页,位于~\Views\Home文件夹内。然后当我运行应用程序时,URL变成了http://localhost:4148/Views/Home/Index.cshtml,并且显示资源无法找到。我该怎么做才能纠正它?URL映射在哪里进行?

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
1
右键单击您的项目>属性。在Web选项卡下的StartAction部分中设置StartUrl。 - Yorgo
1
你知道你有不同的端口吗?(来自你的代码)将你的端口设置为特定的端口,你就不应该有问题 :) :: 同时你的默认 URL 应该是: "Home/Index" - cpoDesign
21个回答

1

使用HomeController.cs的简单解决方案:

打开Controllers文件夹下的HomeController.cs文件。 添加以下代码:

public ActionResult Edit()
{
    return View();
}

现在,如果您使用的是不同的控制器(而不是HomeController):
要像这样查看您的视图:
http://localhost:1234/xyz/MyView

在Controllers文件夹下的xyzController.cs文件中,确保添加以下类似的ActionResult方法:
public ActionResult MyView()
{
    return View(myView); //pass in your view if you want.
}

当我没有正确引用我的模型名称时,我也收到了这条消息:
@using (Html.BeginForm("MyView", "MyModel", FormMethod.Get))

1

我在这里补充一点,如果有人遇到首页控制器上的索引页面不再加载的问题,可能是因为您还没有设置您的启动项目。右键单击您想要应用程序启动的项目,并将其设置为启动项目,然后您就可以开始使用了。


1
对我来说,问题是由于命名空间问题引起的。
我已经将我的Web项目类中的项目命名空间从MyProject更新为MyProject.Web,但我忘记更新项目属性>>默认命名空间。因此,当我添加新控制器时,它仍在使用旧的命名空间。我所要做的就是在新控制器中更正命名空间,然后它就可以工作了。

1
如果您正在使用IIS Express,可能是因为您打开了另一个使用相同虚拟目录的项目。当您打开第二个解决方案时,VS会将该IIS目录重新映射到另一个位置。结果会出现不同的问题。我和主题发起者一样遇到了同样的错误。
解决方法:关闭所有VS Studio实例。使用您正在工作的项目打开VS并重新构建。

这个答案帮助我找到了解决方案。我将一个项目复制到一个新的解决方案中,但由于与 OP 相同的错误,我无法使其正常工作。我查看了 IIS Express 使用的 applicationhost.config 文件,并发现它有额外的记录,具有相同的网站名称和 (1)。我删除了 .vs 文件夹。清理并重新构建。然后它就可以工作了。也可能只需删除项目中的 applicationhost.config 而不是整个 .vs 文件夹即可使其正常工作。 - Soenhay

0

我有一个名为usersController的控制器,因此我尝试通过将默认控制器从Home更改为usersController来创建它的起始页面,如下所示。

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

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

解决方案是将控制器的默认值更改为“users”而不是“usersController”。
 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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
如果您已尝试了以上所有解决方案,但问题仍然存在,则可以使用此简单解决方案。从link打开Facebook调试器,输入页面URL并单击“获取新的抓取信息”按钮。这将解决您的问题。
我认为背后的原因是,Facebook API保存页面的当前状态并从其自己的服务器显示相同的状态。如果您在编码时单击共享按钮,而实际上您的页面尚未上传,则Facebook API无法在服务器上找到该页面,并将页面状态保存为“未找到资源”。现在,即使您上传了页面,它仍将继续显示相同的消息。当您从Facebook调试器中提取页面时,它会从头开始解决所有问题并保存页面的当前状态,然后您的共享按钮就可以正常工作,而不需要更改编码。

0

asp.net mvc 项目的起始页面默认为 "当前页面"。只需打开一个服务器端文件并启动项目即可。这样,mvc 就会打开默认控制器,该控制器是您项目的 homecontroller。


你能解释一下什么是“服务器端文件”吗? - LCJ

0

您可以在项目属性(项目 -> 项目属性)中更改起始页。 在 Web 选项卡下,您可以选择 指定页面 并将起始页更改为 home/home/index。 这将根据您的路由将您重定向到正确的页面。 http://localhost:4148/Views/Home/Index.cshtml 的地址无法正常工作,因为它根据您的路由进行处理,这些路由规定 URL 需要是 http://localhost:4148/{controller}/{action} 和可选的 /{id}。

如果您想了解更多关于路由的信息,请查看 此处。


0

我遇到了类似的问题,只不过我没有使用Index.cshtml这个名称作为我的View,我举个例子用了LandingPage.cshtml,我的问题是我的控制器中的ActionResult名称与我的视图名称不同(在这种情况下,我的ActionResult被称为Index())- 这实际上是显而易见的,是我犯的一个愚蠢的错误,但我对MVC还很陌生,所以我会在这里和那里犯一些基本错误。

因此,在我的情况下,我需要将我的ActionResult更改为与我的View相同的名称:LandingPage.cshtml

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

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


        return View(PD);
    }

我是MVC的新手,也许这篇文章能帮助到其他和我一样正在苦苦挣扎的新手。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接