Frage

Ich arbeite an einer ASP.NET/C# Website.

Ich lese Daten aus einer Datenbank und speichere sie in einem Wörterbuch

Dictionary<string, decimal> Results

und binden Sie es dann an ein ASP.NET-Diagramm

PieChart.Series["Series"].Points.DataBind(Results, "Key", "Value", string.Empty);  

Ich möchte die Beschriftung eines Punktes ändern, wenn ich auf eine Schaltfläche klicke.

protected void Button_Click(object sender, EventArgs e)
{
    PieChart.Series["Series"].Points[0].Label = "abc"
}

Wenn ich jedoch auf die Schaltfläche klicke, tritt ein PostBack auf und die im Wörterbuch "Ergebnisse" gespeicherten Daten sowie das Diagramm gehen verloren.

Gibt es eine Möglichkeit, die Daten bei einem Postback nicht zu verlieren, ohne erneut aus der Datenbank lesen zu müssen?

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Ja Verwenden Sie ViewState , um Daten zwischen Postbacks zu erhalten.

public Dictionary<string, decimal> Results
{ 
  get { return ViewState["Results"]; }
  set { ViewState["Results"] = value; }
}

Hinweis: Überprüfen Sie den Nullwert von viewstate, da sonst eine Ausnahme oder ein Fehler ausgelöst wird

Andere Tipps

Sie können die Daten in ViewState oder Session einfügen, um sie dann "auf der anderen Seite" herausziehen zu können.

Eine bessere Lösung als die Verwendung von ViewState und das Hin- und Herleiten dieser Daten vom Client besteht darin, eine Client-ID zu erstellen, die jeweils hin und her übergeben wird, und einen Cache dieser Daten auf der Serverseite zu speichern, der von dieser ID verschlüsselt wird . Auf diese Weise müssen Sie diese Daten nicht jedes Mal vom Client zum Server senden, sondern nur umgekehrt.

Das klingt für mich immer noch falsch, ist aber eine bessere Lösung als einige der anderen Antworten, die aufgrund des Hin- und Herbewegens der Daten so viel Aufwand verursachen würden.

Da Sie nur die Anzeigeinformationen ändern und aufgrund Ihrer Frage nicht glauben, dass Sie diese Daten tatsächlich in irgendeiner Weise verarbeiten, scheint es mir, dass dies wirklich eine Aufgabe für eine Art Javascript ist neben Ihrer ASP.NET-Seite. Ich habe dies noch nie getan, aber einige grundlegendes Googeln haben einige Artikel darüber.

Warum verschieben Sie Ihren Code nicht, um einer Funktion einen Wert für das Wörterbuch zuzuweisen, anstatt ViewState zu verwenden, und rufen diese Funktion dann bei jedem Postback von page_load aus auf?Auf diese Weise verlieren Sie keine Daten aus Ihrem Diagramm.

Ich verwende oft asp: HiddenField, um kleine Mengen nicht sicherer Daten auf der Clientseite zu speichern.

In der Funktion Page Load () können Sie den Wert für ausgeblendete Felder festlegen und ihn dann in Funktionen zurücklesen, die später aufgerufen werden.

Verwenden Sie dies nicht für sichere Daten, da der Clientbenutzer eine Ansichtsquelle erstellen kann, um die Daten auf der Seite anzuzeigen, wenn er dies wünscht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top