使用@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&amp;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 });
    }
}

使用@Hml.ActionLink向控制器传递两个参数,但第二个参数值始终为null

我看到您使用的是属性路由和MapMvcAttributeRoutes;你有这条路线的地图吗?如果没有,默认路由将优先,并且只将第一个参数作为ID。

您需要添加一个需要这两个参数的路由。

像这样的东西会被打到控制器的动作上:

[Route("{itemID:int}/{scaleID:int}", Name = "DeleteItemTest")]
public ActionResult DeleteItemTest(int? itemID, int? scaleID)

请注意,这不是确切的代码,只是一些可以使用的东西。