Asp.net mvc ActionLink行为不一致

Asp.net mvc ActionLink行为不一致,asp.net-mvc,razor,asp.net-mvc-5.2,Asp.net Mvc,Razor,Asp.net Mvc 5.2,我有两个控制器,每个控制器都有一个使用route属性的操作。在我的视图中,我使用@Html.ActionLink帮助器呈现指向每个操作的链接。但是,其中一个操作无法呈现正确的url 以下是我到目前为止的情况: 查看 <div class="actionRow row"> <div class="col-lg-12"> @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @reques

我有两个控制器,每个控制器都有一个使用route属性的操作。在我的视图中,我使用@Html.ActionLink帮助器呈现指向每个操作的链接。但是,其中一个操作无法呈现正确的url

以下是我到目前为止的情况:

查看

<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { @pRef = Model.PRef }, new { @class = "btn btn-info" })
    </div>
</div>
<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { }, new { @pRef = Model.PRef })
    </div>
</div>
<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { @class = "btn btn-info" } new { @pRef = Model.PRef })
    </div>
</div>
业务总监

public class ModellingController : Controller
{
    [HttpGet]
    [Route("modelling/{requestId}")]
    public ActionResult EditRequest(int requestId)
    {
    }
}
public class BusinessController : Controller
{
    [HttpGet]
    [Route("business/details-card/{pRef}")]
    public ActionResult Details(string pRef)
    {
    }
}
结果

通过这种方式,我可以在页面上生成以下URL:

第一个链接是正确的,但是我希望第二个链接看起来像

更多详细信息

如果我修改视图,使其具有以下标记,那么我确实生成了正确的链接,但是它没有样式化——原因很明显。但是,如果我尝试添加类详细信息,它们将作为querystring参数附加到链接中

更改视图

<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { @pRef = Model.PRef }, new { @class = "btn btn-info" })
    </div>
</div>
<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { }, new { @pRef = Model.PRef })
    </div>
</div>
<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { @class = "btn btn-info" } new { @pRef = Model.PRef })
    </div>
</div>

@ActionLink(“编辑”、“编辑请求”、“建模”,新的{@requestId=Model.requestId},新的{@class=“btn-btn-danger”})
@ActionLink(“取消”,“详细信息”,“业务”,新{},新{@pRef=Model.pRef})
屈服

进一步修改视图

<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { @pRef = Model.PRef }, new { @class = "btn btn-info" })
    </div>
</div>
<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { }, new { @pRef = Model.PRef })
    </div>
</div>
<div class="actionRow row">
    <div class="col-lg-12">
        @Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = Model.RequestId }, new { @class = "btn btn-danger" })
        @Html.ActionLink("Cancel", "Details", "Business", new { @class = "btn btn-info" } new { @pRef = Model.PRef })
    </div>
</div>

@ActionLink(“编辑”、“编辑请求”、“建模”,新的{@requestId=Model.requestId},新的{@class=“btn-btn-danger”})
@ActionLink(“取消”,“详细信息”,“业务”,新建{@class=“btn btn info”}新建{@pRef=Model.pRef})
生成btn信息

更多信息


控制器中没有其他控制器,也没有其他操作,我在route.config中正确启用了map属性routing。在您的案例中,它帮助添加了:

routes.MapMvcAttributeRoutes();
在RouteConfig中:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
鉴于:

@Html.ActionLink("Edit", "EditRequest", "Modelling", new { @requestId = 1 }, new { @class = "btn btn-danger" })
@Html.ActionLink("Cancel", "Details", "Business", new { @pRef = "123" }, new {@class = ""})

我应该补充一点,这是在建模控制器的视图中发生的,如果这造成了任何差异,它看起来好像您的参数混淆了-htmlAttributes应该是最后一个参数,routeValues before:@Ric您应该看到我的原始视图中的route和html值顺序正确。我只展示了他们切换的选项,以强调事实是似乎能够正确识别路线。这不起作用,因为样式不适用。我已经有了我的路由配置,看起来像这样,我开始怀疑默认路由在某些情况下会采用这种方式,但不清楚这些情况是什么。我运行了你的代码,不得不添加routes.mapmvcattributterroutes();这很有帮助。我认为订单很重要。我改变了这个你的观点-actionlink-添加了upim标记这个作为答案,因为它促使我发现我自己的愚蠢!当我复制您的想法并将文字值添加到pRef参数时,它起到了作用-导致我在填充ViewModel的AutoMapper规则中发现了错误的配置。因此,Model.PRef在不需要时为null。然而,助手却以难以置信的沉默失败了