Dieser Beitrag beschreibt die Lösung der folgenden Aufgabenstellung, die sich immer wieder ergibt.
In einer Silverlight-Anwendung soll ein Parameter aus dem HTML-Request übernommen werden.
Ich gehe von folgendem Request aus:
%URI%?Mitgliedsnummer=4&x=y&Item=test
Der Wert der Mitgliedsnummer soll in eine Textbox übernommen werden. Dies geschieht sinnvoller Weise, indem im Konstruktor für das Event Loaded ein Event-Handler registriert wird.
Loaded += new RoutedEventHandler(MainPage_Loaded);
Die Implementierung wird im folgenden Listing gezeigt. Wichtig ist, dass man über Silverlight auf das Objektmodell des Browsers zugreifen kann.
void MainPage_Loaded(object sender, RoutedEventArgs e)
{bool pFlag = false;
String nummer = “”;
foreach (String myKey in HtmlPage.Document.QueryString.Keys) {
if (myKey == “Mitgliedsnummer”) {
pFlag = HtmlPage.Document.QueryString.TryGetValue(myKey,out nummer);
break;
}
}
if (pFlag) {
this.txtMitgliedsnummer.Text = nummer;
}
}
An der Lösung sind drei Objekte beteiligt:
- Die Verwendung des HTMLPage Objektes aus dem Namespace System.Windows.Browser.
- Hier finden ich das Document Objekt und dieses hat wiederum ein QueryString Objekt. Damit kann ich den HTML-Request darstellen.
Auf der Basis dieses Objektmodells ist die Umsetzung relativ einfach.
- Mit Hilfe von foreach werden Keys des QueryString-Objektes durchlaufen (ich weis nicht, ob noch weitere Parameter übergeben werden)
- Wenn ich den Key finden, dann lesen ich über TryGetValue(string key, out string) den zum Key gehörenden Wert aus. Die Funktion liefert war oder falsch.
- Danach schreiben ich, wenn es denn einen Übergabeparameter Mitgliedsnummer gegeben hat, diesen Wert in die TextBox txtMitgliednummer.
Die Funktion kann auch noch kürzer geschrieben werden:
String nummer = “”;
foreach (String myKey in HtmlPage.Document.QueryString.Keys)
{
if (myKey == “Mitgliedsnummer”)
{
if (HtmlPage.Document.QueryString.TryGetValue(myKey, out nummer))
this.txtMitgliedsnummer.Text = nummer;
break;
}
}
