login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[ASP.net C#] TextBox type=number

Offline jerone - 25/07/2009 16:54 (laatste wijziging 25/07/2009 18:16)
Avatar van jeroneJS gevorderde Hallo mensen,

ASP.net bevat standaard geen TextBox met type=number;
  1. <input type="number" />
Dus ik wilde zelf een control maken, maar ik kan nergens vinden waar ASP.net de type=text toevoegd.
Ik heb nu dit, maar nu krijg ik 2x het type attribute:
  1. [DefaultProperty("Text")]
  2. [ToolboxData("<{0}:TextBoxNumber runat=\"server\"></{0}:TextBoxNumber>")]
  3. public class TextBoxNumber : TextBox {
  4. public override TextBoxMode TextMode {
  5. get {
  6. return TextBoxMode.SingleLine;
  7. }
  8. }
  9. public override void RenderControl(HtmlTextWriter writer) {
  10. writer.AddAttribute(HtmlTextWriterAttribute.Type, "number");
  11. base.Render(writer);
  12. }
  13. }
Ik kan wel zelf de begintag en attributes toevoegen, maar dan moet ik dat doen voor alle attributes en alle customs.

Iemand die meer weet? gr J

EDIT:
----------------
Ik heb een oplossing gevonden; override de HtmlTextWriter:
  1. [DefaultProperty("Text")]
  2. [ToolboxData("<{0}:TextBoxNumber runat=\"server\"></{0}:TextBoxNumber>")]
  3. public class TextBoxNumber : TextBox {
  4. public override TextBoxMode TextMode {
  5. get {
  6. return TextBoxMode.SingleLine;
  7. }
  8. }
  9. protected override void Render(HtmlTextWriter writer) {
  10. base.Render(new TextBoxNumberTextWriter(writer));
  11. }
  12. }
  13.  
  14. public class TextBoxNumberTextWriter : HtmlTextWriter {
  15. public TextBoxNumberTextWriter(HtmlTextWriter writer)
  16. : base(writer) {
  17. this.InnerWriter = writer.InnerWriter;
  18. }
  19. public TextBoxNumberTextWriter(System.IO.TextWriter writer)
  20. : base(writer) {
  21. base.InnerWriter = writer;
  22. }
  23.  
  24. public override void AddAttribute(HtmlTextWriterAttribute key, string value) {
  25. if (key == HtmlTextWriterAttribute.Type) {
  26. value = "number";
  27. }
  28. base.AddAttribute(key, value);
  29. }
  30. public override void AddAttribute(string name, string value) {
  31. if (name.ToLower() == "type") {
  32. value = "number";
  33. }
  34. base.AddAttribute(name, value);
  35. }
  36. protected override void AddAttribute(string name, string value, HtmlTextWriterAttribute key) {
  37. if (key == HtmlTextWriterAttribute.Type || name.ToLower() == "type") {
  38. value = "number";
  39. }
  40. base.AddAttribute(name, value, key);
  41. }
  42. }


Toch zou ik het liefst een extra optie willen toevoegen aan de TextBoxMode, maar hoe kan ik die overridden?

8 antwoorden

Gesponsorde links
Offline rambo - 25/07/2009 18:26
Avatar van rambo HTML beginner Wat versta jij onder <input type="number"/> ? De waarde van het attribuut bestaat volgens mij helemaal niet?
Offline kickasgamer - 25/07/2009 19:08
Avatar van kickasgamer PHP ver gevorderde volgens mij een textbox waarin enkel numerieke tekens in voor kunnen komen
Offline jerone - 25/07/2009 19:09
Avatar van jerone JS gevorderde Jawel, maar dat is HTML5.
Op dit moment alleen Opera (vanaf 9 al) support dit.
Het mooie is dat de fall-back situatie is type=text, wat in alle browsers werkt (zelfs IE 6).
Offline wvmaaren - 05/08/2009 11:13
Avatar van wvmaaren Nieuw lid Waarom zet je niet gewoon een regexvalidatie erop en sta je daarin alleen cijfers toe?
Offline Abbas - 05/08/2009 11:26 (laatste wijziging 05/08/2009 11:26)
Avatar van Abbas Gouden medaille

Crew .NET
Inderdaad, je kan met een RegularExpressionValidator werken en enkel numerieke invoer toelaten, of je kan ook met de RangeValidator werken.

Range

  1. <asp:RangeValidator id="rangeVal" runat="server" ControlToValidate="JouwTextbox" MinimumValue="0" MaximumValue="100" Type="Integer" ErrorMessage="Foute Invoer" />

Regex

  1. <asp:RegularExpressionValidator id="regexVal" runat="server" ControlToValidate="JouwTextBox" ValidationExpression="\d+\.?\d*" ErrorMessage="*Foute Invoer" />
Offline wvmaaren - 05/08/2009 11:53
Avatar van wvmaaren Nieuw lid En natuurlijk niet vergeten om de "causes validation" en "autopostback' op true te zetten in je textbox.

  1. <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" CausesValidation="True"></asp:TextBox>
  2. <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Das niet goed he!" ControlToValidate="TextBox1" ValidationExpression="\d+\.?\d*"></asp:RegularExpressionValidator>
Offline Abbas - 05/08/2009 12:52
Avatar van Abbas Gouden medaille

Crew .NET
Waarom moet dat per se? Als je gewoon die validators hebt en je geeft iets verkeerd in en klikt op een Button dan wordt toch gewoon die foutmelding weergegeven.
Offline wvmaaren - 05/08/2009 13:19
Avatar van wvmaaren Nieuw lid dan moet je sowieso causes validation wel aangeven.. Ik zou er zelf voor kiezen om autopostback ook aan te zetten omdat hij dan direct de foutmelding geeft, zonder dat je op een button hoeft te klikken.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.19s