【问题标题】:RenderAction in _layout gives "No route in the route table matches the supplied values."_layout 中的 RenderAction 给出“路由表中没有路由与提供的值匹配。”
【发布时间】:2015-08-10 03:18:59
【问题描述】:

在我的 _layout.cshtml 我有以下行

Html.RenderAction("ChamberComment", "Carnets", new { Area = "Chamber"});

这会产生以下错误:

路由表中没有路由与提供的值匹配。

我正在使用routedebugger,所以在显示这个错误的页面下,我实际上可以看到正在找到匹配的路由:

我使用 AttributeRouting 定义了这条路线:

namespace MyProject.Net.Site.Areas.Chamber.Controllers
{
    [RouteArea("Chamber", AreaPrefix = "")]
    [AuthorizeRoles(Roles = RoleDiscriminator.Chamber)]
    public class CarnetsController : BaseController
    {
        [HttpGet]
        [Route("chamber/carnets/{slug}/{step}/chamberRemarks")]
        public ActionResult ChamberComment(string slug, string step)
        {

我也可以直接上网址

http://myproject/chamber/carnets/18-reffr/general/chamberRemarks

它会在浏览器中呈现部分内容,并在预期的 RouteDebugger 信息下方...

因此,当在 _layout 母版页中使用时,系统无法将 RenderAction 语句转换为正确的操作,但它能够将指定的 url 路由到此操作..

知道我应该往哪个方向看吗?

【问题讨论】:

  • 您是否尝试过提供 Html.RenderAction("ChamberComment", "Carnets", new { Area = "Chamber", slug = "18-reffr", step = "general"}); 中的 slug 和 step 参数?如果这些参数不在当前正在渲染的 Url 中,您可能需要手动将它们传递给 renderAction 方法。
  • 就是这样! :-) 当前 Url 包含 slug 但步骤是“硬编码”而不是参数。我正在重构并且没有意识到 RenderAction 不会知道 URL 的那部分是“步骤”。
  • 发表您的评论作为答案,我会接受。
  • 很高兴听到这个消息,会的:)

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


【解决方案1】:

如果您在顶级控制器中有子操作并且您尝试从布局中呈现它,则会出现相关问题。就我而言,这发生在一个有区域的项目中。我不确定它是否也发生在没有区域的项目中。

我有一个默认路由,它应该满足 [Render]Action 参数。然而,这个案例总是失败:

Html.Action("ActionName", "ControllerName")

解决方案是添加一个空区域:

Html.Action("ActionName", "ControllerName", new { area = "" })

现在,异常不再发生,部分视图被渲染。

【讨论】:

    【解决方案2】:

    您是否尝试过提供如下所示的 slug 和 step 参数:

     Html.RenderAction("ChamberComment", "Carnets", new { Area = "Chamber", slug = "18-reffr", step = "general"});
    

    如果这些参数不在当前正在呈现的 Url 中,则需要手动将它们传递给 Html.RenderAction 方法。

    根据您的评论,在当前网址中找到了 slug,但步骤是硬编码,因此您需要将其提供给帮助程序。

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2019-02-03
      • 1970-01-01
      相关资源
      最近更新 更多