4

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

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

并不是

candidates?FirstName=John

我查看了 URL 路由,但我不确定它是否应该用于类似这样的装饰,或者是否可以使用它来实现我所要求的。

4

4 回答 4

2

你是如何生成那个 URL 的?使用路由,如果它们应该在查询字符串中,它应该可以正常工作。我们只为您指定的 RouteValues 生成查询字符串参数。

我过去做过的一件事是为特定链接编写自己的辅助方法,在这些链接中我可能会传入一个对象以获取路由值,但想在将其传递给底层路由之前清除我不需要的值API。这对我来说效果很好。

于 2009-07-20T20:59:23.790 回答
0

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

于 2009-07-20T20:31:19.167 回答
0

我有时需要处理各种视图使用的部分路径值。

然后我通常访问 routeDictionary 并更改它。您获得的好处是,代码很有可能会在路由更改中幸存下来,并且您可以在多个生成的 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))
   { %>
于 2009-07-20T22:33:03.213 回答
0

也许使用这个Querystring Builder - 在 Request.QueryString 字典中迭代查询字符串并使用构建器构建一个新的(或者只是字符串连接它们)?

于 2009-07-20T23:17:03.030 回答