【问题标题】:MVC 4 routing to a controllerMVC 4 路由到控制器
【发布时间】:2018-03-26 20:02:54
【问题描述】:

我是 MVC 的新手,我正试图通过创建一个练习网站来解决问题,该网站将成为一个用于查看和上传图像的画廊网站。我遇到的问题是我无法让路由正常工作。

这是我的路由代码和解决方案树的链接: https://imgur.com/a/Oc1Tt?

我是否错误地设置了视图和控制器?

我得到的错误是:未找到视图“索引”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:

感谢您的任何意见

【问题讨论】:

  • 将 HomeView.cshtml 重命名为 Index.cshtml
  • 代码必须在问题中 - 而不是指向它的图像的链接。
  • 1) 最好给action方法和对应的view同名。所以你只需要做return View()。 2) 在每个控制器和视图中有一个默认的Index 操作也很有用。 3) 无需将View 附加到cshtml 文件。 4) 阅读有关 MVC 约定的更多信息。
  • @Stephen Muecke 我尝试将代码放入问题中,但无法正常工作。太晚了,我只截图了。下一次,我会提出问题。

标签: asp.net-mvc asp.net-mvc-4 routing asp.net-mvc-routing


【解决方案1】:

路由通过将传入请求转换为路由值或使用路由值生成 URL 来工作。路由值要么设置为 URL 本身的参数,要么设置为默认值,或者两者都设置(其中默认值使 URL 参数可选)。

您尚未在路线中设置任何路线值。由于 URL 中没有路由参数,因此需要设置默认值(MVC 需要控制器和操作)。

routes.MapRoute(
    name: "Gallery",
    url: "Gallery/Index",
    defaults: new { controller = "Gallery", action = "Index" }
);

也就是说,你的 Default 路由已经覆盖了这个 URL。如果您希望Default 路由未涵盖的行为,您只需要添加自定义路由。

此外,如果您更改视图名称使其与操作方法的名称不匹配,则必须从操作方法中显式指定名称。

public ActionResult Index()
{
    return View("~/Views/Gallery/GalleryView.cshtml");
}

默认情况下,MVC 使用约定。将视图命名为 Index.cshtml 而不是 GalleryView.cshtml 要简单得多,因此您可以从操作方法中返回 View

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2013-08-04
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多