Установить параметр запроса на основе текущего URL - PullRequest
0 голосов
/ 06 января 2019

Я работаю над стандартным компонентом подкачки для моего проекта. Все контроллеры с подкачкой ожидают параметра PageIndex в URL.

Поэтому я хочу создать URL-адрес на основе текущего URL-адреса, за исключением параметра PageIndex.

Например, у меня есть фильтры для моего интернет-магазина, такие как Производитель и MaxPrice. Пользователь открывает ссылку mystore.com/products?manufacturer=Apple&MaxPrice=999.

Тогда он хочет перейти на 3 страницы. Таким образом, трехстраничная ссылка на моей странице должна иметь ссылку mystore.com/products?manufacturer=Apple&MaxPrice=999&PageIndex=3.

enter image description here

Итак, необходимая функция MVC должна:

  1. Сохраняет все существующие параметры, такие как MaxPrice и производитель
  2. Заменить только параметр PageIndex
  3. не использовать какой-либо жесткий код контроллера и значения действий (например, контроллер = «Продукты», действие = «Индекс»)

Я пытаюсь использовать этот код:

<a class="page-link" href="@Url.RouteUrl(new { PageIndex = page })">
    @page
</a>

Работает нормально, кроме правила 2 - другие аргументы не сохраняются. Поэтому, если пользователь нажмет на эту ссылку, он перейдет на mystore.com/products?PageIndex=3

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы можете использовать их для получения текущего URL

string url = HttpContext.Current.Request.Url.AbsoluteUri;
// http://localhost:1302/TEST/Default.aspx

string path = HttpContext.Current.Request.Url.AbsolutePath;
// /TEST/Default.aspx

И затем вы можете добавить индекс страницы, как этот, и перенаправить на этот URL

url = url+"&PageIndex=3";

Рекомендуется

Или вы можете получить параметры URL с помощью

@Url.RequestContext.RouteData.Values["manufacturer"]
@Url.RequestContext.RouteData.Values["MaxPrice"]

И использовать эти значения для создания нового URL-адреса в представлении

0 голосов
/ 06 января 2019

Я предлагаю динамически создавать URL-адрес, получая currentUrl со строками запроса «Request.Url.AbsoluteUri», затем удаляя pageIndex из URL-адреса, если он существует, затем снова добавляя индекс страницы.

подсказка: URL должен быть определен как переменная в вашей бритве, чтобы упростить задачу

Для удаления строки запроса вы можете использовать регулярное выражение

string queryString = "Default.aspx?Agent=10&Language=2"; //Request.QueryString.ToString();
string parameterToRemove="Language";   //parameter which we want to remove
string regex=string.Format("(&{0}=[^&\s]+|{0}=[^&\s]+&?)",parameterToRemove);
string finalQS = Regex.Replace(queryString, regex, "");
...