webentwicklung-frage-antwort-db.com.de

Wie wird der Querystring in C # aktualisiert?

Irgendwo in der URL befindet sich ein & sortBy = 6. Wie aktualisiere ich dieses bei einem Klick auf & sortBy = 4 oder & sortBy = 2? Muss ich benutzerdefinierte String-Funktionen schreiben, um die korrekte Weiterleitungs-URL zu erstellen?

Wenn ich nur eine Abfragezeichenfolgenvariable anhängen muss, würde ich das tun

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

Aber ich möchte eine vorhandene Querystring-Variable ändern. 

44
developer747

Verwenden Sie diesen Ansatz, um einen vorhandenen QueryString-Wert zu ändern:

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

Ich gehe näher in eine weitere Antwort ein.

117
Ahmad Mageed

Rufen Sie die Querzeichenfolge von sortby ab, und führen Sie string replace für die vollständige URL aus.

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

Lass mich wissen, wie es geht :)

Viel Glück

7
m.othman
    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);
    }
5
Mathias Nohall

Wenn Sie dies wirklich wünschen, müssen Sie auf dieselbe neue Seite mit geänderter Abfragezeichenfolge umleiten, wenn bereits Personen geantwortet haben. Dadurch wird Ihre Seite erneut geladen, und die Seite wird erneut geladen, um den Querstring zu ändern, was keine gute Praxis ist.

Aber warum brauchst du das?

Wenn Sie den Wert von sortBy von 6 auf 4 ändern möchten, um ihn überall in der Anwendung zu verwenden, empfehle ich, den Wert der Abfragezeichenfolge in einem Variablen- oder Ansichtszustand zu speichern und diesen Ansichtszustand überall zu verwenden.

Für z.

in PageLoad kannst du schreiben

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

und überall sonst (auch nach dem Postback) können Sie ViewState ["SortBy"] verwenden

2
Imran Rizvi

Basierend auf der Lösung von Ahmad habe ich folgende Methode erstellt, die allgemein verwendet werden kann

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;
}

und dann uns wie folgt 

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

Sie können dies mit etwas Javascript clientseitig tun, um die Abfragezeichenfolge zu erstellen und die Seite mithilfe von windows.open umzuleiten.

Andernfalls können Sie Response.Redirect oder Server.Transfer serverseitig verwenden.

0
Strillo

SolrNet hat einige sehr hilfreiche Methoden zur Erweiterung von URLs. 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
James Hull

Ich denke, Sie könnten die Abfragezeichenfolge auf folgende Weise in Ihrem serverseitigen Code ersetzen.

NameValueCollection filtered = new NameValueCollection(request.QueryString);

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

Die Abfragezeichenfolge wird an den Server übergeben. Sie können die Abfragezeichenfolge beliebig als Zeichenfolge behandeln. Sie wird jedoch erst ausgeführt, wenn die Seite erneut gelesen werden kann (d. H. An den Server zurückgesendet wird). Wenn Sie also fragen, wie mit dem Wert einer Abfragezeichenfolge verfahren werden soll, greifen Sie einfach auf Request.QueryString ["key"] zu. Wenn Sie möchten, dass diese 'Änderung' in der Abfragezeichenfolge vom Server berücksichtigt wird, müssen Sie nur die Seite effektiv mit dem neuen Wert neu laden. Konstruieren Sie zum Beispiel die URL erneut page.aspx?id=30 und übergeben Sie diese an eine Umleitungsmethode.

0
SkonJeet

Sie müssen zu einer neuen URL umleiten. Wenn Sie vor dem Umleiten einige Arbeit auf dem Server ausführen müssen, müssen Sie Response.Redirect (...) in Ihrem Code verwenden. Wenn Sie keine Arbeiten auf dem Server durchführen müssen, verwenden Sie HyperLink und rendern Sie es vorher.

Wenn Sie nach dem Erstellen der tatsächlichen URL fragen, sind mir keine integrierten Funktionen bekannt, die die Aufgabe erfüllen können. Sie können Konstanten für Ihre Paths- und QueryString-Argumente verwenden, um zu vermeiden, dass sie im gesamten Code wiederholt werden.

Der UriBuilder kann Ihnen beim Erstellen der URL helfen, nicht jedoch der Abfragezeichenfolge

0
Stilgar

Die einzige Möglichkeit, die QueryString zu ändern, besteht darin, dieselbe Seite mit dem neuen QueryString umzuleiten:

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

http://msdn.Microsoft.com/de-de/library/a8wa7sdt(v=vs.100).aspx

0