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.