Avatar billede tommer Nybegynder
27. april 2005 - 09:27 Der er 9 kommentarer og
1 løsning

valid html med validering i asp.net

Jeg prøver at lave noget valid html med visual studio.
Problemet er at når man bruger f.eks en RequiredFieldValidator får ens knap automatisk denne formatering:

<input type="submit" name="btnSend" value="Send" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btnSend" class="Button" />

problemet er så at language="javascript" ikke er valid html.
hvordan kan jeg fjerne det ??
Avatar billede burningice Nybegynder
27. april 2005 - 09:32 #1
subclasse RequiredFieldValidator og override dens RenderAttributes-metode så du tvinger den til ikke udskrive language="javascript"
Avatar billede tommer Nybegynder
27. april 2005 - 09:35 #2
øøøø kan du forklare bare lidt nærmere... evt et lillebitte eksempel ;-)
Avatar billede tommer Nybegynder
27. april 2005 - 10:06 #3
min klasse nedarver jo i forvejen System.Web.UI.Page hvad gør jeg så??
Avatar billede burningice Nybegynder
27. april 2005 - 11:45 #4
jeg har kigget lidt i sourcekoden til henholdsvis Button og RequiredFieldValidator, og det viser sig det faktisk er Button-klassen du skal lave om på.

Som det er nu har den følgende metode

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
      if (this.Page != null)
      {
            this.Page.VerifyRenderingInServerForm(this);
      }
      writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
      writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
      writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
      if (((this.Page != null) && this.CausesValidation) && (this.Page.Validators.Count > 0))
      {
            string text1 = Util.GetClientValidateEvent(this.Page);
            if (base.HasAttributes)
            {
                  string text2 = base.Attributes["onclick"];
                  if (text2 != null)
                  {
                        text1 = text2 + text1;
                        base.Attributes.Remove("onclick");
                  }
            }
            writer.AddAttribute(HtmlTextWriterAttribute.Onclick, text1);
            writer.AddAttribute("language", "javascript");
      }
      base.AddAttributesToRender(writer);
}

og som du kan se er det linjen writer.AddAttribute("language", "javascript"); der skal væk. Det du skal gøre er at lave en ny klasse der nedarver fra System.Web.UI.Webcontrols.Button og alt der skal være i den er følgende metode

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
      if (this.Page != null)
      {
            this.Page.VerifyRenderingInServerForm(this);
      }
      writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
      writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
      writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
      if (((this.Page != null) && this.CausesValidation) && (this.Page.Validators.Count > 0))
      {
            string text1 = Util.GetClientValidateEvent(this.Page);
            if (base.HasAttributes)
            {
                  string text2 = base.Attributes["onclick"];
                  if (text2 != null)
                  {
                        text1 = text2 + text1;
                        base.Attributes.Remove("onclick");
                  }
            }
            writer.AddAttribute(HtmlTextWriterAttribute.Onclick, text1);
      }
      base.AddAttributesToRender(writer);
}
Avatar billede tommer Nybegynder
27. april 2005 - 13:09 #5
jeg er igang med klassen, men får at vide at:

'System.Web.UI.Util' is inaccessible due to its protection level
'System.Web.UI.WebControls.Button' does not contain a definition for 'HasAttributes'

Og når jeg har den klar hvad gør jeg så? har ikke rigtig styr på nedarvning...
Avatar billede burningice Nybegynder
27. april 2005 - 17:58 #6
den først med util kan klares med denne streng

return "if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); ";

den anden er noget værre. Den er nemlig erklæret som internal, som betyder at kun klasser inde i System.Web.dll kan benytte den. Arg, *bander og svovler over MS*.

Det den porperty tjekker om, er om der er oprettet en AttributesCollection og Viewstate. Jeg kan ikke helt gennemskue hvilken effekt den har, men det er i hvert fald umuligt at imitere dens funktion da den tjekker på to interne variabler i WebControl-klassen som vi ikke har adgang til.
Prøv evt. at fjern det tjek og se om det ikke skulle virke alligevel. Evt. kan du lave denne if-statement istedet

if (this.Attributes.Count > 0 && this.ViewState.Count > 0)
Avatar billede burningice Nybegynder
27. april 2005 - 17:59 #7
altså.. den med util, det skal  være

string text1 = "if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); ";
Avatar billede tommer Nybegynder
02. januar 2006 - 21:28 #8
send svar burningice så vi kan lukke her
Avatar billede burningice Nybegynder
12. januar 2006 - 16:43 #9
svar
Avatar billede tommer Nybegynder
12. januar 2006 - 19:20 #10
tak ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester