如何从ActionLink访问id参数?

时间:2012-07-16 21:26:53

标签: asp.net-mvc asp.net-mvc-3 razor

问题是id = 5已在URL中http://localhost:4032/Category/5。但要将该值传递给ActionLink,我似乎必须这样做:

<td> @Html.ActionLink(p.ProdNo, "Main", "Home", new { id = 5, prodno = p.ProdNo }, null) </td>

这会产生正确的网址:http://localhost:4032/Main/5/1097

但必须这样做似乎不太正确。我知道必须有一些聪明的方法来处理这个问题。不幸的是,现在已经很晚了,而且我都很聪明。

我试过了:

<td> @Html.ActionLink(p.ProdNo, "Main", "Home", new {prodno = p.ProdNo }, null) </td>

但结果是http://localhost:4032/Main?prodno=1097

我尝试将参数添加到代码隐藏中的相应方法,但这似乎也没有用。

简而言之,在使用ActionLink时,如何在URL中获取routevalue并传入另一个/新路由值?

Global.asax中

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Sections", // Route name
                "{controller}/{action}/{id}/{prodno}/{instid}/{section}", // URL with parameters
                new { controller = "TestEdit", action = "Index", id = UrlParameter.Optional, prodno = UrlParameter.Optional, instid = UrlParameter.Optional, section = UrlParameter.Optional } // Parameter defaults
            );

            routes.MapRoute(
                "Pumps", // Route name
                "{controller}/{action}/{id}/{prodno}", // URL with parameters
                new { controller = "Home", action = "Main", id = UrlParameter.Optional, prodno = UrlParameter.Optional  } // Parameter defaults
            );

            routes.MapRoute(
                "Jobs", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Jobs", id = UrlParameter.Optional } // Parameter defaults
            );

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

2 个答案:

答案 0 :(得分:1)

我认为您需要为prodno参数设置路线。看起来这个线程可能包含一个解决方案:

Routing with Multiple Parameters using ASP.NET MVC

答案 1 :(得分:1)

您可以从RouteData

中获取它
@Html.ActionLink(
    p.ProdNo, 
    "Main", 
    "Home", 
    new { id = ViewContext.RouteData["id"], prodno = p.ProdNo }, 
    null
)