使用@Hml.ActionLink向控制器传递两个参数,但第二个参数值始终为null
本文关键字:参数 第二个 null 两个 控制器 ActionLink @Hml 使用 | 更新日期: 2023-09-27 17:59:29
在ASP.Net MVC 5应用程序中,我使用@Hml.ActionLink帮助程序来调用控制器上的操作,其中我需要传递两个参数。但是,第二个参数总是以null值结束。
这是带有ActionLink:的视图代码
@Html.ActionLink(
linkText: "Remove",
actionName: "DeleteItemTest",
controllerName: "Scales",
routeValues: new
{
itemID = 1,
scaleID = 2
},
htmlAttributes: null
)
这是控制器代码:
public ActionResult DeleteItemTest(int? itemID, int? scaleID)
{
//...doing something here....
return View();
}
这是最终出现在页面上的html:
<a href="/scales/deleteitemtest/?itemID=1&scaleID=2">Remove</a>
在我的控制器中,"itemID"的值为1,"scaleID"为null。我做错了什么?
更新-根据请求添加路由配置:
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.AppendTrailingSlash = true;
routes.LowercaseUrls = true;
// Ignore .axd files.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Ignore everything in the Content folder.
routes.IgnoreRoute("Content/{*pathInfo}");
// Ignore everything in the Scripts folder.
routes.IgnoreRoute("Scripts/{*pathInfo}");
// Ignore the Forbidden.html file.
routes.IgnoreRoute("Error/Forbidden.html");
// Ignore the GatewayTimeout.html file.
routes.IgnoreRoute("Error/GatewayTimeout.html");
// Ignore the ServiceUnavailable.html file.
routes.IgnoreRoute("Error/ServiceUnavailable.html");
// Ignore the humans.txt file.
routes.IgnoreRoute("humans.txt");
// Enable attribute routing.
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
}
我看到您使用的是属性路由和MapMvcAttributeRoutes;你有这条路线的地图吗?如果没有,默认路由将优先,并且只将第一个参数作为ID。
您需要添加一个需要这两个参数的路由。
像这样的东西会被打到控制器的动作上:
[Route("{itemID:int}/{scaleID:int}", Name = "DeleteItemTest")]
public ActionResult DeleteItemTest(int? itemID, int? scaleID)
请注意,这不是确切的代码,只是一些可以使用的东西。