Подтвердить что ты не робот

Как обновить querystring в С#?

Где-то в URL-адресе есть & sortBy = 6. Как я могу обновить это до & sortBy = 4 или? SortBy = 2 нажатием кнопки? Нужно ли писать пользовательские строковые функции для создания правильного URL-адреса перенаправления?

Если мне просто нужно добавить переменную строки запроса, я бы сделал

string completeUrl = HttpContext.Current.Request.Url.AbsoluteUri + "&" + ...
Response.Redirect(completeUrl);

Но я хочу изменить существующую переменную запроса.

4b9b3361

Ответ 1

Чтобы изменить существующее значение QueryString, используйте этот подход:

var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
nameValues.Set("sortBy", "4");
string url = Request.Url.AbsolutePath;
Response.Redirect(url + "?" + nameValues); // ToString() is called implicitly

Более подробно рассмотрю еще один ответ.

Ответ 2

Извлеките запрос sortby, затем выполните замену строки на полный URL-адрес следующим образом:

string sUrl = *retrieve the required complete url*
string sCurrentValue = Request.QueryString["sortby"];
sUrl = sUrl.Replace("&sortby=" + sCurrentValue, "&sortby=" + newvalue);

Сообщите мне, как это происходит:)

Удачи.

Ответ 3

    private void UpdateQueryString(string queryString, string value)
    {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        isreadonly.SetValue(this.Request.QueryString, false, null);
        this.Request.QueryString.Set(queryString, value);
        isreadonly.SetValue(this.Request.QueryString, true, null);
    }

Ответ 4

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

Но зачем вам это нужно?

Если вы хотите изменить значение sortBy с 6 на 4, чтобы использовать всюду в приложении, мое предложение заключается в том, чтобы сохранить значение строки запроса в некоторой переменной или состоянии представления и использовать это состояние просмотра везде.

Например,

в Page_Load вы можете написать

if (!IsPostBack)
{
  ViewState["SortBy"] = Request.QueryString["sortBy"];
}

и везде (даже после обратной передачи) вы можете использовать ViewState [ "SortBy" ]

Ответ 5

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

private string ModifyQueryStringValue(string p_Name, string p_NewValue)
{

    var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
    nameValues.Set(p_Name, p_NewValue);
    string url = Request.Url.AbsolutePath;
    string updatedQueryString = "?" + nameValues.ToString();
    return url + updatedQueryString;
}

а затем мы это следующим образом

Response.Redirect(ModifyQueryStringValue("SortBy","4"));

Ответ 6

Вам нужно перенаправить на новый URL. Если вам необходимо выполнить некоторую работу на сервере, прежде чем перенаправлять туда, вам необходимо использовать Response.Redirect(...) в вашем коде. Если вам не нужно выполнять работу на сервере, просто используйте HyperLink и визуализируйте его заранее.

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

UriBuilder может помочь вам создать URL-адрес, но не строку запроса

Ответ 8

Вы можете сделать это clientide с помощью javascript для построения строки запроса и перенаправления страницы с помощью windows.open.

В противном случае вы можете использовать Response.Redirect или Server.Transfer на стороне сервера.

Ответ 9

У SolrNet есть некоторые очень полезные методы расширения Url. http://code.google.com/p/solrnet/source/browse/trunk/SampleSolrApp/Helpers/UrlHelperExtensions.cs?r=512

    /// <summary>
    /// Sets/changes an url query string parameter.
    /// </summary>
    /// <param name="helper"></param>
    /// <param name="url">URL to process</param>
    /// <param name="key">Query string parameter key to set/change</param>
    /// <param name="value">Query string parameter value</param>
    /// <returns>Resulting URL</returns>
    public static string SetParameter(this UrlHelper helper, string url, string key, string value) {
        return helper.SetParameters(url, new Dictionary<string, object> {
            {key, value}
        });
    }

Ответ 10

Я думаю, вы могли бы выполнить замену строки запроса следующим образом на вашем серверном коде.

NameValueCollection filtered = new NameValueCollection(request.QueryString);

filtered.Remove("SortBy");
filtered.Add("SortBy","4");

Ответ 11

Строка запроса передается на сервер. Вы можете обрабатывать строку запроса как строку, которая вам нравится, но ничего не сделает, пока страница не будет готова к ее повторному чтению (т.е. Отправлено обратно на сервер). Поэтому, если вы спрашиваете, как обращаться со значением строки запроса, вы просто просто получаете к ней запрос Request.QueryString [ "key" ]. Если вы хотите, чтобы это "изменение" в строке запроса рассматривалось сервером, вам просто нужно эффективно перезагрузить страницу с новым значением. Так что постройте url снова page.aspx?id=30, например, и передайте это в метод перенаправления.