代码之家  ›  专栏  ›  技术社区  ›  Graham Conzett

从ASP.NET MVC中的查询字符串中删除空键

  •  4
  • Graham Conzett  · 技术社区  · 15 年前

    有没有一种方法可以从ASP.NET MVC中的查询字符串中删除空键或空键?例如,我有一个页面,我在其中过滤结果表上的数据,如果我搜索john,查询字符串将重新显示为:

    candidates?FirstName=John&LastName=&Credit=false&Previous=false&Education=&Progress=
    

    而不是

    candidates?FirstName=John
    

    我看了一下URL路由,但我不确定它是否应该用于像这样的化妆品,或者是否可以实现我所要求的使用它。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Haacked    15 年前

    如何生成该URL?通过路由,如果这些都要在查询字符串中,那么应该可以正常工作。我们只为您指定的路由值生成查询字符串参数。

    我过去做过的一件事是为特定链接编写自己的助手方法,在这些链接中,我可能会为路由值传入一个对象,但希望在将其传递到底层路由API之前清除不需要的值。这对我很有效。

        2
  •  0
  •   Adam Luter    15 年前

    无论您使用的是什么URL生成器或控件,都需要特殊的逻辑来从列表中除去这些不需要的标记。对于一个通用的URL生成器或控件来说并不明显 Credit=false 是没用的——不是吗 Credit=true 是否为默认值?同样,空字符串也可能意味着什么。(还有) Lastname= 不同于 Lastname .

        3
  •  0
  •   Mathias F    15 年前

    有时我需要在varius视图使用的部分中处理路由值。

    然后我通常访问并更改路由器字典。您得到的好处是,代码很有可能在路由中的更改中存活下来,并且您可以在多个生成的URL中使用routevalues。

    大多数人会争辩说这个代码最好的地方不是视图。但希望你能理解。

    查看代码:

       RouteValueDictionary routeValues = ViewContext.RouteData.Values;
       routeValues.Remove(...);
       routeValues.Add(...);
       routeValues["Key"] = ...;
    
       <%
             using (Html.BeginForm(
                 Url.RequestContext.RouteData.GetRequiredString("Action"),
                 Url.RequestContext.RouteData.GetRequiredString("Controller"),
                 routeValues,
                 FormMethod.Get))
       { %>
    
        4
  •  0
  •   Jon Galloway    15 年前

    也许用这个 Querystring Builder -在request.querystring字典中迭代querystrings,并使用构建器(或仅使用字符串concat)构建新的查询字符串?

        5
  •  0
  •   Bikal Lem    14 年前

    看到这个 Post 以了解如何在ASP.NET MVC中执行此操作。