Url.Action,参数来自哪里

时间:2014-02-03 17:13:48

标签: asp.net-mvc asp.net-mvc-4 razor url-action

我在视图中有这个javascript代码:

function getUrl(id) {
    var url = "@Url.Action("Product", "Product")/" + id;
    return url;
}

这是路由配置:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "localized",
    url: "{culture}/{controller}/{action}/{id}/{title}",
    defaults: new { culture = "en", controller = "Home", action = "Index",
         id = UrlParameter.Optional, title = UrlParameter.Optional},
    constraints: new { culture = "en|fa" }
            );

我对Url.Action(“产品”,“产品”)的期望是返回/en/Product/Product/,但我得到的是/en/Product/Product/92,92是当前产品的ID而我我试图为下一个产品创建网址。我可以通过this answer的替换技巧找到解决方法,但现在我只想知道为什么会这样。

2 个答案:

答案 0 :(得分:2)

如果您未指定,

Url.Action将包含当前路线值。

试试这个

@Url.Action("Product", "Product", new { id = UrlParameter.Optional })/" + id;

或者您可以在id调用中将Url.Action设置为null以清除它,然后将ID附加到结尾。

答案 1 :(得分:1)

默认情况下,

id将在url中传递。您可以使用此行传递的任何ID创建URL

var url = "@Url.Action("Product", "Product")/" + id;

如果你在url中获取当前id,那么这就是你传递给该方法的内容。如果你想获得没有id的网址,只需删除该部分

var url = "@Url.Action("Product", "Product")";

您链接的替换对于将信息从脚本传递到您正在调用的操作非常有用。结合MVC和javascript的好方法