Validátor ASCX-ben

Az ASP.NET 2.0 óta be lehet állítani, hogy melyik validátor milyen gomb megnyomása esetén ellenőrizzen. Ez egy nagyon hasznos tulajdonság: lehetővé teszi, hogy két feltöltő/szerkesztő felület is lehessen egy oldalon, amik mind validáltak, és nem szólnak bele egymás életébe. Azt, hogy mely validátorok tartoznak egy csoportba, és mely gombokra aktivizálódnak a ValidationGroup propertyjben lehet megadni. Azonos ValidationGroup = közös működés. A gond akkor kezdődik, ha többször felhasznált oldal-elemeket készítünk, például ASCX-eket. Ekkor ugyanis, ha több azonos típusú ASCX-et teszünk egy oldalra (pl.: sok FileFeltoltes.ascx-et), akkor azok gyermekvezérlői és validátorai egyszerre izgulnak – mármint mindegyik ASCX-é egyszerre (így csak akkor lehet egy fájlt feltölteni, ha mindegyik FileFeltoltes.ascx valid).

A probléma oka, hogy az ASCX-ekről az oldalba bekerülő vezérlők ValidationGroupja azonos, emiatt azok egyszerre aktivizálódnak. Az ütközésfeloldáshoz ezt a ValidationGroup egyezést kell megszüntetni. Az egyik lehetséges módszer, hogy az ASCX-eken lévő vezérlők ValidationGroupjába belekódoljuk az ASCX azonosítóját. Ekkor a különböző nevű ASCX-ek validátorai különböző esetekben aktivizálódnak. Ez a belekódolás csak futási időben tehető meg, egy lehetséges implementációt mutat az alábbi kódrészlet:

<asp:TextBox ID="EvTextBox" runat="server"
    Text='<%# Bind("Ev") %>'
    CssClass="rovid"
    ValidationGroup='<%# "Update_" + this.ID %>' />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
    ErrorMessage="*"
    ValidationGroup='<%# "Update_" + this.ID %>'
    ControlToValidate="EvTextBox" />
<asp:Button ID="Button3" runat="server" Text="Módosítás"
    CausesValidation="true"
    ValidationGroup='<%# "Update_" + this.ID %>'
    CommandName="Update" />


Dávid Zoltán

Dávid Zoltán Mérnök Informatikusként végeztem a BME-n, jelenleg webfejlesztéssel és gépi tanulással foglalkozom.

2010.03.10. 20:00:01 | Permalink | Hozzászólások: 0 | Tárgyszavak:


  • OutputCache kikapcsolása POST esetén

    Dávid Zoltán Ha OutputCachet használsz ASP.NET-ben az utólagos teljesítményfokozásra, akkor jobb ha tudod, hogy alapértelmezetten nem csak a GET-ek, hanem a POST-ok válaszait is gyorsítótárazza (ráadásul külön-külön, erről Gincsai Gábor barátom tudna mesélni). Ebben az a kellemetlen, hogy a PostBackjeid valójában semmilyen eseményt nem váltanak ki szerveroldalon: nem fut le a Page_Load, nem futnak a gombok eseménykezelői stb. Én ez ellen így védekezek. Tovább »
  • Dual boot VHD-ból kék halállal

    Balássy György (MS RD, ASP.NET MVP, MCTS) Mint korábban már írtam róla, sikerült megoldanom, hogy a Windows 7-em mellett VHD-ból tudjak Windows Server 2008 R2-t bootolni. Ez működött is szépen, ám a minap a szerver indítása közben kék halál fogadott. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások