在我的_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路由到此操作。
我知道应该朝哪个方向看?
答案 0 :(得分:2)
如果您在顶级控制器中有子操作并尝试从布局中渲染它,则会出现相关问题。就我而言,这发生在一个有区域的项目中。我不确定它是否也出现在没有区域的项目中。
我有一个默认路由应该满足[Render] Action参数。但是,这种情况总是失败:
Html.Action("ActionName", "ControllerName")
解决方案是添加一个空区域:
Html.Action("ActionName", "ControllerName", new { area = "" })
现在,不再出现异常并呈现局部视图。
答案 1 :(得分:1)
您是否尝试过提供slug和step参数,如下所示:
Html.RenderAction("ChamberComment", "Carnets", new { Area = "Chamber", slug = "18-reffr", step = "general"});
如果这些参数不在当前正在呈现的Url中,则需要手动将它们传递给Html.RenderAction
方法。
根据你的评论,slug可以在当前的Url中找到,但是步骤是硬编码的,所以你需要将它提供给帮助者。