【问题标题】:Url.Action, Where does the parameter come fromUrl.Action,参数从哪里来
【发布时间】:2014-02-03 17:13:47
【问题描述】:

我在视图中有这个 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("Product", "Product") 的期望是返回 /en/Product/Product/ 但我得到的是 /en/Product/Product/92 和 92 是当前产品的 id,我正在尝试为下一个产品创建 url。感谢this answer 的替换技巧,我可以找到解决方法,但现在我只想知道为什么会这样。

【问题讨论】:

  • “我正在尝试为下一个产品创建 url”是什么意思?您能告诉我们您将通过 ajax 调用重定向的操作吗?

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


【解决方案1】:

Url.Action 将包含当前路由值,如果您不指定它们。

试试这个

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

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

【讨论】:

  • 你回答的第一行是我解释这种行为所需要的肯定,谢谢。
【解决方案2】:

id 默认情况下将在 url 中传递。您使用此行传递的任何 id 创建 url

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2019-12-06
    • 2018-07-27
    • 2020-12-26
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多