Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[ASP.NET] Rendering van Validator-controls*

Pagina: 1
Acties:
  • 362 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met een vraagje over het stylen van de foutmeldingen die de ASP.NET validation controls genereren.

Als ik hier een validation control aanmaak:

code:
1
2
3
4
5
            vl_postcode = new RegularExpressionValidator();
            vl_postcode.ControlToValidate = "postcode";
            vl_postcode.ValidationExpression="[0-9]{4}[a-zA-Z]{2}";
            vl_postcode.ErrorMessage = mymessage;
            vl_postcode.CssClass = "foutmelding";


en de CSS:

code:
1
2
3
4
5
            .foutmelding {
               background-color: #000;
               font-family: arial;
               color: #ccc;
            }


De foutmelding wordt echter niet gerenderd zoals in de CSS class "foutmelding".
De background-color wordt wel zwart zoals in de .foutmelding class, ipv wit zoals standaard, maar zowel de font-family als de tekstkleur worden genegeerd, die blijven dus het standaard rode Times New Roman. ALs ik de gerenderde html-source bekijk zie ik ook waarom:

code:
1
<span id="vl_postcode" class="foutmelding" style="color:Red;visibility:hidden;">postcode moet in formaat 1234AB !</span>


De style property wordt na de class property toegewezen aan het <span> element en overrides dus de css waarden color en visibility die daarin staan.

Mijn vraag is: Hoe kan ik ervoor zorgen dat ASP.NET die hele style property niet rendert ?

Ik heb al bedacht om de Style property van een Validation Control op null te zetten, maar dat blijkt een read-only property te zijn dus dat gaat ook niet... en in het kader van scheiding van markup en makeup wil ik die tekstkleur en fontfamily liever niet in het aspx of cs bestand zetten maar gewoon in de stylesheet...

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
waarschijnlijk heb je in je designer de style properties gezet van de foutmelding.

Als je die even weg haalt zou hij de class moeten gebruiken om de melding te stylen.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Die kleur wordt door .Net automatisch gerenderd. Als je ForeColor="" erbij zet, gebeurt dat niet en wordt wel de kleur uit je CSS gebruikt. (Bij mij werkt dat prima, bij een ValidationSummary.)

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Verwijderd

Topicstarter
waarschijnlijk heb je in je designer de style properties gezet van de foutmelding.

Als je die even weg haalt zou hij de class moeten gebruiken om de melding te stylen.
Maar... ik maak die hele validator dynamisch aan. En die ForeColor property staat standaard op rood (en backcolor op wit, en font op Times, etc.), en wat ik wil, is dat die properties gewoon op null gezet kunnen worden ofzo, wat niet lijkt te kunnen, of ik zit helemaal in de verkeerde hoek te zetten.

Ik maak gebruik van Visual Studio 2005 Standard Edition, bedoel je dat daar globale instellingen in staan aangaande het renderen van deze controls ? Ik heb al even gekeken maar niet echt iets gevonden...

  • pjonk
  • Registratie: November 2000
  • Laatst online: 22-11 20:39
vl_postcode.attributes["style"] = "" werkt ook niet?

Eventuele ander optie is een afgeleid control maken voor de Validator en in de Render method de style attribuut nooit renderen. De laatste optie kost helaas wel een hoop tijd, maar misschien dat iemand al ooit zoiets heeft gebouwd.

It’s nice to be important but it’s more important to be nice


Verwijderd

Topicstarter
Als je ForeColor="" erbij zet, gebeurt dat niet
In de .aspx file wel ja, daar was ik ook net achter, maar als ik de validators dynamisch aanmaak, dan is "ForeColor=""" geen geldige syntax omdat het een System.Drawing.Color() type is.

De enige (vieze) oplossing die ik heb gevonden is deze:
code:
1
vl_postcode.ForeColor = new System.Drawing.Color();


Dus opnieuw een (leeg?) Color object aanmaken... dan gehoorzaamt hij de CSS class. Wel lullig dat er dan niks met het default aangemaakte System.Drawing.Color(red) gedaan wordt.

Ik zou niet weten welke nette en makkelijke oplossing er nog is (dus zonder dat er 2x een Color object gemaakt wordt waarvan alleen de laatste gebruikt wordt), maar dit werkt in ieder geval.

Die afgeleide is ook een optie inderdaad, zal ik nog es naar kijken.

[ Voor 5% gewijzigd door Verwijderd op 31-08-2007 14:40 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

En Color.Empty?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ja inderdaad ik zie het, "empty" staat gewoon tussen de kleuren.. Dat ik dat niet gezien heb.

Ik zit alleen nog met iets.. het zou natuurlijk mooi zijn om de ForeColor, ErrorMessage, CssClass en ValidationExpression niet elke keer opnieuw te setten voor elke postcodecheck-validator op de site(s).

Dus ik dacht even een childklasse te maken:

code:
1
2
3
4
5
6
7
8
9
10
11
public partial class postcodeValidator : RegularExpressionValidator
{
    public postcodeValidator(string controlID)
    {
        ControlToValidate = controlID;
        ForeColor = System.Drawing.Color.Empty;
        ErrorMessage = "The postcode must be of format: 1234AB";
        CssClass="foutmelding";
        ValidationExpression="[0-9]{4}[a-zA-Z]{2}";
    }
}


maar helaas, als ik dit ding dynamisc aanmaak in mijn cs bestand, doet hij dus niks.
Het object is er wel maar wordt niet getriggerd...

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Omdat die ook niet aangeroepen wordt?
En waarom een partial class?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
het keyword "partial" had inderdaad niet gehoeven in dit geval, maar maakt ook niet uit voor de werking.

Wat ik eigenlijk wil is voornamelijk de clientside formvalidation, die je ook krijgt als je een standaard validator statisch (in je .aspx file) toevoegt. Dus zodra je je te valideren veld verlaat, krijg je een foutmelding als de waarde niet aan de validatie-eisen voldoet.

Ik zou niet weten waarom dit niet werkt nu ik mijn klasse dynamisch aanmaak. Er wordt automatisch iets van een javascript-onexit-event aan gekoppeld, waarna die foutmelding komt als de waarde niet valide.

Het werkt trouwens ook niet als ik een standaard validation control dynamisch aanmaak.. ik zal wel iets vergeten maar ik weet niet wat. Zowel de textbox als de validation control dezelfde validationGroup meegeven helpt ook niet.

Verwijderd

Topicstarter
Ik had nog even twee dingen ter bijdrage toe te voegen aan het topic...

1.

de reden dat mijn dynamisch gecreeerde validator niet werkte was dat ik
controls.add(validator)
vergeten was (stomstomstom)

2.

Een oplossing om een validator control te gebruiken, die de forecolor standaard niet instelt (zodat je die later op "System.Drawing.Color.Empty" moet setten), is om die te definieren binnen een user control, en daar die color property op empty te setten.
Pagina: 1