Как обновить строку запроса в C #? - PullRequest
44 голосов
/ 19 марта 2012

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

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

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

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

Ответы [ 11 ]

117 голосов
/ 19 марта 2012

Чтобы изменить существующее значение 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

Более подробно я расскажу в другой ответ .

7 голосов
/ 19 марта 2012

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

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

Дайте мне знать, как это происходит:)

Удачи

5 голосов
/ 30 августа 2013
    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);
    }
2 голосов
/ 19 марта 2012

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

Но зачем тебе это?

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

Например,

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

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

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

1 голос
/ 02 апреля 2015

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

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"));
0 голосов
/ 19 марта 2012

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

0 голосов
/ 19 марта 2012

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

NameValueCollection filtered = new NameValueCollection(request.QueryString);

filtered.Remove("SortBy");
filtered.Add("SortBy","4");
0 голосов
/ 19 марта 2012

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

    /// <summary>
    /// Sets/changes an url's 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}
        });
    }
0 голосов
/ 19 марта 2012

Вы можете сделать это на стороне клиента с помощью некоторого JavaScript, чтобы создать строку запроса и перенаправить страницу, используя windows.open .

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

0 голосов
/ 19 марта 2012

Единственный способ изменить QueryString - это перенаправить на ту же страницу с новой строкой QueryString:

Response.Redirect("YourPage.aspx?&sortBy=4")

http://msdn.microsoft.com/en-us/library/a8wa7sdt(v=vs.100).aspx

...