taghelper tag net custom asp.net parsing compiler-construction response.write server-tags

asp.net - net - tag helpers



¿Dónde se documenta esta característica de ASP.NET?<%=formato de cadena, objeto params[] args%> (3)

Por lo que sé, el analizador ASP.NET traduce <% =%> en una llamada a HttpResponse.Write (cadena).

Tal vez el <%= "{0} is {1}", "Foo", 42 %> se traduzca a Response.Output.Write(string format, params object[] arg) , siendo la Output de tipo TextWriter , que sería la explicación de acuerdo con http://www.hanselman.com/blog/ASPNETResponseWriteAndResponseOutputWriteKnowTheDifference.aspx

Aparentemente, es posible escribir una salida con formato utilizando la construcción <%= %> ( bloque de procesamiento ) en las páginas y vistas de formularios web ASP.NET.

<%= "{0} is {1}", "Foo", 42 %>

Esto hará que "Foo sea 42". Por lo que sé, el analizador ASP.NET traduce <%= %> en una llamada a HttpResponse.Write(string) . Obviamente, en el código anterior, no hay una traducción uno a uno, porque el número de argumentos no coincide (suponiendo que , en la expresión anterior separa los argumentos).

Ahora he visto que la clase TextWriter tiene un TextWriter Write(string, object[]) .

He comprobado la salida del analizador y, de hecho, llama al método TextWriter que acepta un argumento de params object[] para formatear:

private void @__Renderform1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) { // ... @__w.Write( "{0} is {1}", "Foo", 42 );

¿Está ese comportamiento documentado en alguna parte?


Este es un bloque de código incorporado <%= %> y existe para mantener la compatibilidad con Classic ASP.

Como viste, <%= "{0} is {1}", "Foo", 42 %> es equivalente a:

string s = string.Format("{0} is {1}", "Foo", 42); Response.Write(s);

Ese comportamiento está documentado here :

Escribe una cadena con formato que contiene la representación de texto de una matriz de objetos en la secuencia de salida, junto con cualquier espacio de tabulación pendiente. Este método utiliza la misma semántica que el método String.Format. (Invalida a TextWriter.Write (Cadena, Objeto []).)

Here es donde se documenta que el Bloque de procesamiento de código llama al método de escritura.

Finalmente, la sintaxis para los bloques de código incrustados se ha actualizado para .NET 4 como se describe here .