Asp.net mvc ActionLink行为不一致
我有两个控制器,每个控制器都有一个使用route属性的操作。在我的视图中,我使用@Html.ActionLink帮助器呈现指向每个操作的链接。但是,其中一个操作无法呈现正确的url 以下是我到目前为止的情况: 查看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
<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。然而,助手却以难以置信的沉默失败了