Silverlight 2.0 - Predanie inicializačných parametrov aplikácii

Publikoval Michal Kočí dňa 8.5.2008 o 21:51 v kategórii Silverlight

V niektorých scenároch je žiaduce, aby Vaša Silverlight aplikácia bola pri spustení inicializovaná z HTML stránky. Ako jej predať parametre je obsahom tohto príspevku.

Kedy posielať inicializačné parametre

Predstavte si, že Vaša Silverlight aplikácia je napísaná univerzálne a to tak, že je konfigurovateľná. Napríklad ak pracuje s dátovým súborom a je jej jedno, kde je tento uložený aj ako sa volá. Jediné čo potrebuje, aby sa dozvedela kde sa tento dátový súbor nachádza.

Toto sa môže stať napríklad ak HTML kód generujete, napríklad cez ASP.Net a súbor má byť v ľubovoľných momentoch rôzne pomenovaný. Napríklad ak by ste mali aplikáciu, ktorá dokáže zmysluplne zobrazovať akýkoľvek XML dokument, pričom vo Vašej ASP.Net aplikácii chcete v rôznych okamihoch zobrazovať rôzny XML dokument. Vtedy je vhodné použiť inicializačné parametre.

Ako nastaviť inicializačné parametre

Silverlight aplikácia je v skutočnosti obyčalný OBJECT element. OBJECT element môže obsahovať parametre v podobe PARAM elementov (pomocou týchto sa napríklad špecifikuje, cesta k Silverlight aplikácii - XAP súboru). Ak k tomuto OBJECT elementu pridáte PARAM ktorého atribút NAME nastavíte na hodnotu initParams, tak túto hodnotu dokážete v aplikácii prečítať - budete k nej môcť v aplikácii pristúpiť ako k vlastnosti typu IDictionary<string, string>.

Ak používate na zobrazenie Silverlight aplikácie komponentu asp:Silverlight, tak táto obsahuje textovú vlastnosť InitParameters do ktorej môžete priradiť inicializačné parametre. Ak chcete priradiť jeden, zadajte ho v tvare kluc=hodnota. Ak ich chcete zadať viac, potom ich jednoducho oddeľte čiarkou.

Ak by sme uvažovali o Silverlight komponente, ktorá dokáže zobraziť XML súbor ktorý špecifikujete (cez nami vymyslený parameter DataFileName) a to konkrétne stanovený počet záznamov z tohto súboru (cez nami vymyslený parameter RecordsCount), potom by markup komponenty mohol vyzerať nasledovne:

<asp:Silverlight ID="MainXaml" runat="server" 
  Source="~/ClientBin/CommunicationClient.xap" Version="2.0" Width="100%" 
  Height="100%" InitParameters="DataFileName=Books.xml,RecordsCount=20" />

Ako prečítať inicializačné parametre

Inicializačné parametre viete načítať v momente spustenia aplikácie, konkrétne počas udalosti Startup. Ak sa pozriete do súboru App.xaml.cs tak tam objavíte metódu Application_Startup, ktorá obsluhuje túto udalosť a ktorá vyzerá nasledovne:

private void Application_Startup(object sender, StartupEventArgs e)
{
    // Load the main control
    this.RootVisual = new Page();
}

Pre načítanie parametrov je dôležitý parameter e, ktorý je typu StartupEventArgs a konkrétne jeho vlastnosť InitParams, ktorá ako som spomínal je typu IDictionary<string, string>. V nej potom nájdete poslané parametre. Takto môže vyzerať metóda, ak chcete načítať parametre a poslať ich stránke (v stránke som si však dopredu vytvoril dve vlastnosti, cez ktoré jej aplikácie predá hodnotu parametrov - vlastnosti DataFileName a RecordsCount).

private void Application_Startup(object sender, StartupEventArgs e)
{
    string dataFileName = e.InitParams["DataFileName"];
    string recordsCount = e.InitParams["RecordsCount"];
 
    int records = 0;
    int.TryParse(recordsCount, out records);
 
    Page page = new Page();
    page.DataFileName = dataFileName;
    page.RecordsCount = records;
 
    this.RootVisual = page;
}

No a vlastnosti v stránke boli vytvorené nasledovne:

public partial class Page : UserControl
{
    public string DataFileName { get; set; }
    public int RecordsCount { get; set; }

Záver

Ak budete v nejakom scenári potrebovať použiť inicializačné parametre, tak už viete ako na to. Nezabudnite však, že tým, že sú v HTML môže dôjsť k ich modifikácii prípadným útočníkom a preto nezabudnite ich hodnoty vždy poriadne zvalidovať, aby ste predišli nepríjemnému prekvapeniu.

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.