【问题标题】:Trying to format URL for Action using multiple params in MVC尝试在 MVC 中使用多个参数格式化操作的 URL
【发布时间】:2014-01-08 18:15:24
【问题描述】:

我有以下动作结果:

        public ActionResult Index(int id, int? siteId)
        {
            //code here....
            return View(object);
        }   

我的路由映射如下:

       routes.MapRoute(
            name: "SettingsRoute",
            url: "Settings/{id}/{siteId}",
            defaults: new
            {
                controller = "Settings",
                action = "Index",
            }
        );

我需要做什么,所以在初始加载期间,网址将是“Settings?id=1&siteId=133”而不是“Settings?id=1”格式。然后选择一个站点,它会构建 URl“Settings/1/133”。

我正在使用以下 actionLink 来创建它:

<li>@Html.ActionLink(site.Name, "Index", "Settings", new { id = Model.SettingsEnvironment.EnvironmentID, siteId = site.SiteID }, null)</li>

我似乎无法正确设置路由。任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    您需要设置可选的 URL 参数:

      routes.MapRoute(
            name: "SettingsRoute",
            url: "Settings/{id}/{siteId}",
            defaults: new
            {
                controller = "Settings",
                action = "Index",
                siteId = UrlParameter.Optional
            }
        );
    

    参考:http://haacked.com/archive/2010/02/12/asp-net-mvc-2-optional-url-parameters.aspx/

    【讨论】:

    • 我这样做了,但它仍然发送到以下 URL:“/Settings/1/1”而不是“/Settings?id=1&siteId=1”。为什么我不能使用多个参数而必须将它们分到路径 /1/1 中?
    • 也许我误解了你的追求。为什么要使用 Querystring 变量? URL 段在 MVC 中更为典型,用于将参数传递给您的操作。
    • K.这就是我想知道的。所以最好和“标准”使用 /{param}/{param}?然后我会忘记查询字符串参数。这就是为什么我对人们对这个路由问题的回答感到如此困惑的原因......哈哈谢谢。
    • 不用担心。您可以使用查询字符串变量,但是是的,通常使用 URL 段。
    猜你喜欢
    • 2012-01-07
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多