在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&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 });
}
}
答案 0 :(得分:3)
我看到你正在使用属性路由和MapMvcAttributeRoutes;你有这个路线映射?如果不是,则默认路由优先,并仅将第一个参数作为ID。
您需要添加一个需要两个参数的路线。
这样的东西会被打到控制器动作上:
[Route("{itemID:int}/{scaleID:int}", Name = "DeleteItemTest")]
public ActionResult DeleteItemTest(int? itemID, int? scaleID)
请注意,这不是确切的代码,只是可以使用的东西。