【问题标题】:vs 2013 mvc routing not working after change to cshtml viewvs 2013 mvc 路由在更改为 cshtml 视图后不起作用
【发布时间】:2014-08-03 20:21:23
【问题描述】:

这是一个很奇怪的问题。我是来自 web 表单的 mvc 世界的新手,我正在尝试理解它的概念。 在vs 2013中使用MVC模板(高级版),我已经建立了一个项目。为了看看事情是如何运作的:

  1. 我创建了一个新的控制器“IndexController”并将其放在文件夹 .../Controllers/IndexController.cs 中
  2. 我为此控制器“Index.cshtml”创建了一个新视图并将其放在相应的文件夹中:.../Views/Index/[@] Index.cshtml
  3. 然后我更改路由,以便默认路由现在将指向此 IndexController 而不是默认 HomeController

这是我的路由表:

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 = "Index", action = "GetIndexPage", id = UrlParameter.Optional }
        );
    }
}

你可以看到我使用“GetIndexPage”作为默认操作而不是“Index”(我正在玩,看看它是如何工作的) 当我在 Index.cshtml 中进行更改时(比如我添加了一个简单的标记并点击“运行”,我总是会收到错误消息

Server Error in '/' Application. The resource cannot be found.

查看地址栏,我看到浏览器正在寻找资源“localhost:xxx/Index/Index”而不是“localhost:xxx/Index/GetIndexPage”。为了解决这个问题,我进入 IndexController 并在行中放了一个断点

return View(...);

现在我点击“运行”,在断点处停止后,一切正常。所以这不是路由问题,因为页面是在这个断点技巧之后显示的。在我对 cshtml 视图进行更改后,Visual Studio 似乎弄乱了我正在使用的 IIS Express 的部署。当我对控制器后面的代码进行更改时,不会出现此问题。我不知道在哪里看...我整晚都在尝试在 Google 和 stackoverflow 中找到解决方案...我不想重新安装整个视觉工作室。任何帮助,对某个方向的任何提示将不胜感激。

【问题讨论】:

  • 在 Views/Index 文件夹中是否有一个名为 'GetIndexPage.cshtml 的视图?
  • 不,我有视图 Index.cshtml
  • 所以你要返回return View("Index");吗?
  • 是的,完全是完整路径
  • [@] 中的 /Views/Index/[@] Index.cshtml 是什么?

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

经过大量试验,我发现 mvc 框架希望操作和视图(该操作返回的)必须具有相同的名称。就我而言,这是有效的:

  1. 路由配置:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Index", action = "IndexPage", id = UrlParameter.Optional }
        );
    
  2. 索引控制器:

    public class IndexController : Controller
    {
       public ActionResult IndexPage()
       {
         return View();
       }
    }
    

你可以看到路由动作与控制器的方法同名:IndexPage 最后创建一个名为 IndexPage.cshtml 的视图

有了这个配置,当我对cshtml文件进行更改时,它会立即反映在浏览器中,并且没有上面报告的错误。

我只想确认这是否确实是必须使用 mvc 方法设置的方式。 (感谢您的帮助)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2022-06-24
    相关资源
    最近更新 更多