Удаление пустых / пустых ключей из строки запроса в asp.net MVC - PullRequest
4 голосов
/ 21 июля 2009

Есть ли способ удалить нулевые или пустые ключи из строки запроса в asp.net MVC? Например, у меня есть страница, где я фильтрую данные в таблице результатов, если я ищу Джона, строка запроса будет отображаться как:

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

а не

candidates?FirstName=John

Я посмотрел на URL-маршрутизацию, но не был уверен, что это что-то, что следует использовать для косметических вещей, подобных этой, или можно ли добиться того, о чем я прошу, используя его.

Ответы [ 5 ]

2 голосов
/ 21 июля 2009

Как вы генерируете этот URL? С Routing, если они должны быть в строке запроса, он должен работать нормально. Мы генерируем только параметры строки запроса для указанных вами RouteValues.

Одна вещь, которую я сделал в прошлом, - это написать свой собственный вспомогательный метод для конкретных ссылок, где я могу передать объект для значений маршрута, но хочу очистить значения, которые мне не нужны, прежде чем передать его базовый API маршрутизации. Это хорошо сработало для меня.

0 голосов
/ 08 августа 2010

См. Пост , чтобы точно увидеть, как это делается в asp.net mvc.

0 голосов
/ 21 июля 2009

Может быть, использовать это Querystring Builder - выполнить итерацию строк запроса в словаре Request.QueryString и создать новую, используя построитель (или просто сопоставить их со строками)?

0 голосов
/ 21 июля 2009

Мне иногда нужно работать со значениями моего маршрута в партиалах, которые используются в различных представлениях.

Затем я обычно получаю доступ к routeDictionary и меняю его. Преимущество, которое вы получаете, состоит в том, что есть хороший шанс, что код переживет изменения в маршрутизации, и что вы можете использовать routeValues ​​в нескольких сгенерированных URL.

Большинство людей утверждают, что лучшим местом для этого кода является не представление. Но, надеюсь, вы поняли идею.

Код вида:

   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))
   { %>
0 голосов
/ 21 июля 2009

Независимо от того, какой генератор URL или элемент управления вы используете, потребуется специальная логика для удаления этих нежелательных тегов из списка. Для обычного генератора URL или элемента управления не очевидно, что Credit=false бесполезен - не может ли быть Credit=true по умолчанию? Точно так же пустая строка может что-то значить. (Также Lastname= отличается от Lastname.

...