2024. április 19., péntek

Gyorskeresés

ASP.NET MVC ClientDataTypeModelValidatorProvider

Írta: | Kulcsszavak: asp.net mvc . client type validation

[ ÚJ BEJEGYZÉS ]

Az ASP.NET MVC-t nehéz nem szeretni, kimondottan jól össze van rakva, jó használni, és ugye alatta van a teljes .NET Framework minden jósággal (pl. Entity Framework). A .NET jellemzően jól felépített cucc, bárhonnan is nézzük, nehéz rajta fogást találni.

A héten sikerült egy olyan dologgal találkoznom, amit nehezen hittem el, gyakorlatilag rosszul (vagy legalábbis hülye módon) implementáltak az ASP.NET MVC-ben egy igen fontos dolgot: attribútum nélküli kliensoldali típusvalidációt.

Ha valaki már használta az MVC keretet, akkor tudhatja, hogy minden különösebb erőfeszítés nélkül reklamál kliensoldalon azért, ha egy numeric típus helyett szöveget írunk egy input-ba, majd el szeretnénk küldeni az adatokat. Ezt a varázslatot végzi nekünk a ClientDataTypeModelValidatorProvider, ami alapból regisztrálva van a ModelValidatorProviders-ben. Ez nagyon klassz, teljesen jól működik, a gond akkor adódott, mikor lokalizálni szerettem volna a validációs üzenetet.

Nem voltak teljesen öngyilkosok a készítők, úgy oldották meg a dolgot, hogy az aktuális alkalmazás Global resource-éből ki tudja olvasni a szöveget. Valamikor ez elég (mondjuk eléggé hallgatnak arról, minek is kell lennie a key mezőnek, hogy működjön, a Reflector segít ezen), de nálunk, ha mind az 50-60 alkalmazásba bele kellene tennem egy Global resource fájlt csak azért, hogy ez működjön, akkor összekarmolnám magam. (A cél az volt, hogy lehetőleg csak egy DLL-t kelljen bereferenciázni.)

Miután túl estem ezen a megrászkódtatáson, kerestem, hogyan lehetne megmondani ennek a szerencsétlennek, hogy mégis honnan és hogyan szedje össze a lokalizált üzeneteket. Akárhogyan is forgattam a cuccot, szimplán kódból nem lehet megoldani, mert teljesen zártra csinálták meg (beágyazott osztályok, nem lehet hozzányúlni semmihez se).

Nem tudtam vele mit kezdeni, ezért megírtam a sajátomat a Reflector segítségével, összesen három osztályt kellett legyártanom (rövidek, semmi extra), használhatóság szempontjából is egész jó lett, mert az alkalmazásokban csak egy sor beírásával az Application_Start-ba megoldom, hogy a saját provider-emet használja a rendszer, ha arra szükség van.

Hozzászólások

(#1) Peter Kiss


Peter Kiss
senior tag
LOGOUT blog

[ értesítő ]

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.