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

时间:2015-06-25 06:10:10

标签: c# asp.net-mvc

在ASP.Net MVC 5应用程序中,我使用@Hml.ActionLink帮助程序在控制器上调用操作,我需要传递两个参数。但是,第二个参数始终以空值结束。

以下是使用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 });
    }
}

1 个答案:

答案 0 :(得分:3)

我看到你正在使用属性路由和MapMvcAttributeRoutes;你有这个路线映射?如果不是,则默认路由优先,并仅将第一个参数作为ID。

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

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

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

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