【发布时间】: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 的那部分是“步骤”。
-
发表您的评论作为答案,我会接受。
-
很高兴听到这个消息,会的:)