Tengo un controlador que genera una cadena que contiene marcas html. Ahora, cuando lo muestro en las vistas, se muestra como una cadena simple que contiene todas las etiquetas. Intenté usar el ayudante Html para codificar / decodificar para mostrarlo correctamente, pero no funciona.
string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
En mis puntos de vista,
@Html.Encode(str)
c#
asp.net
asp.net-mvc
asp.net-mvc-4
Mukesh Sharma
fuente
fuente
Html.Raw
debería ayudar.HtmlStrin
clase, como enHtmlString str = new HtmlString("<span>Some HTML here</span>");
Respuestas:
Estás cerca quieres usar
@Html.Raw(str)
@Html.Encode
toma cadenas y asegura que todos los caracteres especiales se manejen correctamente. Estos incluyen caracteres como espacios.fuente
Deberías estar usando en su
IHtmlString
lugar:Siempre que tenga propiedades de modelo o variables que necesiten contener HTML, creo que esta es generalmente una mejor práctica. Primero que nada, es un poco más limpio. Por ejemplo:
Comparado con:
Además, también creo que es un poco más seguro que usarlo
@Html.Raw()
, ya que la preocupación de si sus datos son HTML se mantiene en su controlador. En un entorno en el que tiene desarrolladores de front-end frente a desarrolladores de back-end, sus desarrolladores de back-end pueden estar más en sintonía con los datos que pueden contener valores HTML, manteniendo esta preocupación en el back-end (controlador).Generalmente trato de evitar el uso
Html.Raw()
siempre que sea posible.Otra cosa que vale la pena señalar, es que no estoy seguro de dónde está asignando
str
, pero algunas cosas que me preocupan sobre cómo puede implementar esto.Primero, esto debe hacerse en un controlador, independientemente de su solución (
IHtmlString
oHtml.Raw
). Debería evitar cualquier lógica como esta en su opinión, ya que realmente no pertenece allí.Además, debería usar su
ViewModel
para obtener valores para su vista (y nuevamente, idealmente usarIHtmlString
como tipo de propiedad). Ver algo como@Html.Encode(str)
es un poco preocupante, a menos que esté haciendo esto solo para simplificar su ejemplo.fuente
puedes usar
@Html.Raw(str)
Consulte MSDN para obtener más información
fuente
Tuve un problema similar con los campos de entrada HTML en MVC. La web paginada solo mostraba la primera palabra clave del campo. Ejemplo: campo de entrada: "El zorro marrón rápido" Valor mostrado: "El"
La resolución fue poner la variable entre comillas en la declaración de valor de la siguiente manera:
fuente
Tuve un problema similar recientemente, y Google me trajo aquí, así que puse esta respuesta aquí en caso de que otros también lleguen aquí, para completar.
Me di cuenta de que cuando tenía html mal formateado , en realidad me estaban quitando todas mis etiquetas html , y solo quedaba el contenido sin etiquetas . En particular, tenía una tabla con una etiqueta de tabla de apertura faltante, y luego todas mis etiquetas html de toda la cadena se arrancaron por completo.
Entonces, si lo anterior no funciona, y todavía te estás rascando la cabeza, también verifica que tu html sea válido.
Me doy cuenta de que incluso después de que lo hice funcionar, MVC estaba agregando etiquetas tbody donde no tenía ninguna. Esto me dice que se está realizando una limpieza (MVC 5), y que cuando no puede suceder, elimina todas / algunas etiquetas.
fuente