Estoy obteniendo el siguiente texto a partir de una base de datos: (suministrado por el cliente, por lo que no puedo hacer mucho con ella)

investment professionals.<BR /><BR /> blah blah blah

que se representa como:

investment professionals.<BR /><BR /> blah blah blah

No quiero imprimir el <BR /> etiquetas en la pantalla. Quiero que ellos se comportan como verdaderos saltos.

El siguiente código Html Helper código se basa el lapso que existe en, añade que a un div y devuelve la cadena HTML:

StringBuilder sbElements = new StringBuilder();

TagBuilder span = new TagBuilder("span") {InnerHtml = subject.AboutText};
sbElements.Append(span.ToString());

TagBuilder div = new TagBuilder("div");
div.MergeAttribute("class", "about-text");
div.InnerHtml = sbElements.ToString();

return div.ToString();

Si me Html.Encode() la salida del método auxiliar, las etiquetas codificadas – /&gt;&lt; – obtener por escrito a la pantalla. ¿Cómo puedo tomar el texto de origen que tengo y asegurarse de que las etiquetas de llegar como HTML, en lugar de texto?

  • Voy a asumir que usted quiso decir «Si yo HtmlDecode() el resultado del método auxiliar…». Si no, entonces mi respuesta es la solución. De lo contrario, son de doble codificación que ya es una cadena codificada y Steve Wellens respuesta es lo que usted necesita en primer lugar.
InformationsquelleAutor DaveDev | 2011-03-15

6 Comentarios

  1. 19

    Intente esto:

        String Input = "investment professionals.&lt;BR /&gt;&lt;BR /&gt; blah blah blah";
    
        String Output = Server.HtmlDecode(Input);
    • He intentado utilizar este . Todavía veo el <p> etiquetas aunque yo no veo otras etiquetas de html . ?
    • No estoy seguro de que lo que están pidiendo. Por favor, publique una nueva pregunta, de entrada, de salida, lo que está haciendo y lo que su salida deseada es.
  2. 32

    Si usted está usando Razor, es doblemente codificar la cadena como @Chevex descrito. Si el uso de las nuevas MVC3 <%: %> sintaxis, también será doblemente codificar. Independientemente de su punto de vista motor, se puede trabajar en torno a la codificación, ya sea con el IHtmlString de la ruta (por ejemplo, MvcHtmlString), descrito por @Chevex o pasando por alto la codificación predeterminada, utilizando una plantilla de sintaxis.

    La tarde, que no impliquen el cambio de cualquier código, sólo requiere el ajuste de la sintaxis que se utiliza para representar a una vista.

    Para La Maquinilla De Afeitar:

    @Html.Raw(yourvariable)

    Para MVC por defecto de la plantilla de vista del sistema:

    <%=yourvariable%>
    • Excelente! es muy útil para mí!
    • usted es el hombre
  3. 10

    Cambiar de retorno div.ToString() a MvcHtmlString.Create(div.ToString()) y el método de tipo de retorno a MvcHtmlString en lugar de un string. Esto evitará que el motor de la vista desde automáticamente la codificación de la salida.

    Regresar MvcHtmlString es la práctica estándar para la representación de la salida de HTML a través de métodos auxiliares.

    Lo que está sucediendo es que se están decodificando el valor de la base de datos y el motor de vista es re-codificación de los mismos, cuando se dicte. El motor de vistas Razor automáticamente HTML codifica la producción en sus puntos de vista a menos que sea una MvcHtmlString. Volviendo MvcHtmlString va a dejar que eso suceda.

    public static MvcHtmlString MyNonHtmlEncodedOutput(this HtmlHelper html)
    {
            StringBuilder sbElements = new StringBuilder();
    
            TagBuilder span = new TagBuilder("span") {InnerHtml = Server.HtmlDecode(subject.AboutText)};
            sbElements.Append(span.ToString());
    
            TagBuilder div = new TagBuilder("div");
            div.MergeAttribute("class", "about-text");
            div.InnerHtml = sbElements.ToString();
    
            return MvcHtmlString.Create(div.ToString());
    }
    • Sin duda una sangrienta TagBuilder debe tener un MvcHtmlString opción de salida?
  4. 6

    Que usted puede probar esto:

     String Input = "&lt;p&gt;New Appartments is Avaliable at very Reasonable Price&lt;/p&gt;";
     String Output = Server.HtmlDecode(Input);
     string _output = System.Text.RegularExpressions.Regex.Replace(Output, "<.*?>", string.Empty);
  5. 1

    Sólo para agregar mis resultados a esta pregunta ya que he tenido problemas para usar × de esta manera.

    SetInnerText() va a html codificar todo el texto por defecto, mientras que InnerHtml no codificar nada como se está a la espera de raw html.

    Así que si tengo esto de la manera correcta alrededor de primero de decodificar su cadena de texto para obtener la onu-etiquetas codificadas (es decir,<br/>) y, a continuación, establezca la propiedad InnerHtml y las etiquetas serán prestados como html.

    así que deberías tener algo como

    element.InnerHtml = Server.HtmlDecode(yourText);

Dejar respuesta

Please enter your comment!
Please enter your name here