sintaxis net mvc extension cshtml code asp c# .net asp.net asp.net-mvc razor

net - razor insert c# code



ASP.NET MVC Razor render sin codificación (7)

Razor codifica la cadena de forma predeterminada. ¿Hay alguna sintaxis especial para renderizar sin codificación?


Además del enfoque @ Html.Raw (cadena) ya mencionado, si genera una MvcHtmlString no se codificará. Esto puede ser útil al agregar sus propias extensiones a HtmlHelper, o al devolver un valor de su modelo de vista que sepa que puede contener html.

Por ejemplo, si su modelo de vista era:

public class SampleViewModel { public string SampleString { get; set; } public MvcHtmlString SampleHtmlString { get; set; } }

Para Core 1.0+ (y MVC 5+) use HtmlString

<!-- this will be encoded --> <div>@Model.SampleString</div> <!-- this will not be encoded --> <div>@Html.Raw(Model.SampleString)</div> <!-- this will not be encoded either --> <div>@Model.SampleHtmlString</div>

entonces

@Html.Raw(Html.Encode(myString).Replace("/n", "<br/>"))


Desde ASP.NET MVC 3, puedes usar:

@Html.Raw(myString)


En el caso de ActionLink, generalmente utiliza HttpUtility.Encode en el texto del enlace. En ese caso, puedes usar HttpUtility.HtmlDecode(myString) funcionó cuando usé HtmlActionLink para decodificar la cadena que quería pasar. p.ej:

@Html.Raw(yourString)


HTML RAW:

@Html.Raw(yourString)


También puedes usar el método WriteLiteral


Use @Html.Raw() con precaución ya que puede causar más problemas con la codificación y la seguridad. Entiendo el caso de uso, ya que tuve que hacerlo yo mismo, pero con cuidado ... Evite permitir que pasen todos los textos. Por ejemplo, solo preservar / convertir secuencias de caracteres específicas y siempre codificar el resto:

@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)

Entonces tiene la tranquilidad de que no ha creado un posible agujero de seguridad y que todos los caracteres especiales / extranjeros se muestran correctamente en todos los navegadores.


@(new HtmlString(myString))