Sikre XHTML-kompatibilitet i ASP.NET 1,1

Ut av boksen, ASP.NET genererte HTML validerer ikke altfor godt mot XHTML 1.0
Ut av boksen, ASP.NET genererte HTML validerer ikke altfor godt mot XHTML 1.0. Når man bruker < danne runat = " server " />, vil den genererte HTML legge til et navn attributt til skjemaet tag. Dette er ugyldig XHTML. Den skjulte boksen som heter __VIEWSTATE må være omsluttet av en < div > tag. Og klientsiden skriptblokker bør være å bruke type = " text /javascript " snarere enn language = " javascript ". Jeg har bygget en klasse (kode nedenfor) som bruker regulære uttrykk for å rydde opp i nødvendige HTML for å være kompatibel med XHTML
. ≪ script runat = " server " > beskyttet ride void Render (HtmlTextWriter forfatter) {Stringbuilder Stringbuilder = new Stringbuilder (); StringWriter stringWriter = ny StringWriter (Stringbuilder); HtmlTextWriter htmlWriter = ny HtmlTextWriter (stringWriter); base.Render (htmlWriter); string html = stringBuilder.ToString (); writer.Write (Components.XHTML.CleanStream (html)); } ≪ /script >
Og her er koden for klassen. Du må kompilere den
hjelp System.Text.RegularExpressions.; namespace Komponenter {offentlig forseglet klasse XHTML {public static streng Clean (String s) {Regex r; r = ny Regex (" < form (name = \\ " ([^ \\ "] +) \\ ") ", RegexOptions.IgnoreCase); s = r.Replace (s, ny MatchEvaluator (FormMatch)); r = ny Regex (" script \\\\ s + (language = \\ " javascript \\ ") ", RegexOptions.IgnoreCase); s = r.Replace (s, ny MatchEvaluator (ScriptAttributeMatch)); r = ny Regex (" <.? inngang * (language = \\ " javascript \\ ") ", RegexOptions.IgnoreCase); s = r.Replace (s, ny MatchEvaluator (InputScriptAttributeMatch)); r = new Regex("<input\\\\s+type=\\"hidden\\"\\\\s+name=\\"__VIEWSTATE\\"\\\\s+value=\\"([^\\"]+)\\"\\\\s+/>" , RegexOptions.IgnoreCase); s = r.Replace (s, ny MatchEvaluator (ViewstateMatch)); returnere s; } Private static streng ViewstateMatch (Match m) {return " < div > " + M.ToString () + " < /div > "; } Private static streng ScriptAttributeMatch (Match m) {return m.ToString () Sett (m.Groups [1] .ToString (), " type = \\ " text /javascript \\ " ").; } Private static streng InputScriptAttributeMatch (Match m) {return m.ToString () Erstatt. (M.Groups [1] .ToString (), " "); } Private static streng FormMatch (Match m) {return m.ToString () Erstatt. (M.Groups [1] .ToString (), " "); }}}
Denne metodikken er kanskje ikke den beste i verden. Men, det fungerer for meg på mine med liten trafikk.



Previous:
Next Page: