Fuera de la caja, ASP.NET HTML generado no validar muy bien contra XHTML 1.0

Fuera de la caja, ASP.NET HTML generado no validar muy bien contra XHTML 1.0. Cuando uno utiliza <form runat="server"/>, el HTML generado se añade un atributo de nombre a la forma etiqueta. Esto no es válido XHTML. El cuadro oculto llamado __VIEWSTATE debe ser encerrado en una etiqueta <div>. Y secuencias de comandos de cliente bloques deben utilizar type = "text / javascript" en lugar de language = "javascript". He construido una clase (código de más abajo) que utiliza expresiones regulares para limpiar el HTML necesario para ser compatible con XHTML.

<script Runat="server">
protected override void render (HtmlTextWriter escritor)
(
StringBuilder StringBuilder = new StringBuilder ();
StringWriter stringWriter = new StringWriter (StringBuilder);
HtmlTextWriter htmlWriter = new HtmlTextWriter (stringWriter);
Base.Render (htmlWriter);
Cadena = html stringBuilder.ToString ();
writer.Write (Components.XHTML.CleanStream (html));
)
</ script>

Y aquí está el código de la clase. Usted tendrá que compilarlo.

 utilizando System.Text.RegularExpressions; 
Componentes de nombres
(
Públicos cerrados clase XHTML
(
Public static CleanStream cadena (string s)
(
Regex r;
r = new Regex ( "<form (name = \" ([^ \ "] +) \") ", RegexOptions.IgnoreCase);
s = r.Replace (s, nuevo MatchEvaluator (FormMatch));
r = new Regex ( "Script \ \ s + (language = \" javascript \ ")", RegexOptions.IgnoreCase);
s = r.Replace (s, nuevo MatchEvaluator (ScriptAttributeMatch));
r = new Regex ( "<entrada .*? (language = \" javascript \ ")", RegexOptions.IgnoreCase);
s = r.Replace (s, nuevo MatchEvaluator (InputScriptAttributeMatch));
r = new Regex ( "<entrada \ \ s + type = \" oculto \ "\ \ s + name = \" __VIEWSTATE \ "\ \ s + = valor \" ([^ \ "] +) \" \ \ s + /> "
, RegexOptions.IgnoreCase);
s = r.Replace (s, nuevo MatchEvaluator (ViewstateMatch));
retorno s;
)
static cadena privada ViewstateMatch (Match m)
(
retorno "<div>" m.ToString + () + "</ div>";
)
static cadena privada ScriptAttributeMatch (Match m)
(
m.ToString regreso (). Sustitúyase (m.Groups [1]. ToString (), "type = \" text / JavaScript \ "");
)
static cadena privada InputScriptAttributeMatch (Match m)
(
m.ToString regreso (). Sustitúyase (m.Groups [1]. ToString (),"");
)
static cadena privada FormMatch (Match m)
(
m.ToString regreso (). Sustitúyase (m.Groups [1]. ToString (),"");
)
)
)

Esta metodología puede no ser la mejor en el mundo. Sin embargo, funciona para mí en mi poco tráfico páginas.

Average rating: