我在视图中有这个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的替换技巧找到解决方法,但现在我只想知道为什么会这样。
答案 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的好方法