2009-08-08 20 views
5

estoy migrando desde un sitio web asp.net a ASP.NET MVClo que es el equivalente a la etiqueta "literal" en asp.net mvc

en el sitio asp.net hay muchos lugares en los que tienen " literal "etiquetas y el servidor genera un montón de html y se adhiere en la etiqueta literal.

lo que equivale a hacer esto en asp.net mvc. ¿Debo empujar esto en ViewData?

Respuesta

10

El equivalente es no tomar las mismas malas decisiones de diseño que el desarrollador original.

Pero, dado que vivimos en el mundo real, inserta sus strings-which-contain-html en el modelo de presentación de una página en particular y luego la escribe en el flujo de respuesta.

En su modelo:

public class MyPageModel 
{ 
    public string HolyCrapItsHtml {get;set;} 
} 

En su controlador:

public ActionResult MyPage() 
{ 
    return View(new MyPageModel 
     {HolyCrapItsHtml = OldCode.GetHtmlICantBelieveIt()}); 
} 

Y en su página:

<div> 
    In the olden days, we'd concatenate our webpages together from strings like: 
    <%= Model.HolyCrapItsHtml %> 
</div> 
+0

gracias por esta respuesta. ¿Puedes ofrecer un enfoque alternativo al que pueda apuntar para refactorizar esto? – leora

+0

Esencialmente la misma cosa, excepto que en lugar de concatenar tu html en (con este ejemplo) OldCode.GethtmlICantBelieveIt, en tu controlador recoges tus datos que componen el contenido de ese html, lo colocas dentro de los modelos y renderizan todo tu html dentro de tu vista usando los contenidos de su modelo. Unos minutos investigando MVC y lo entenderás. – Will

3

que tenían el mismo problema. No se moleste con un MyPageModel, simplemente quédese con ViewData, pero use iguales en lugar de los dos puntos.

<%= ViewData("SomeVarName") %> 
1

Si está utilizando la maquinilla de afeitar, que haría lo siguiente si no se utiliza ayudantes de tipo fuerte

@Model.YourVarName 

Si está trabajando con modelo de vista inflexible de tipos, puede utilizar la valuefor() ayudante

@Html.ValueFor(m => m.YourVarName) 

Si sólo tiene unos pocos literales, que podría ponerlos en el ViewData, pero si usted está siguiendo un verdadero modelo MVC se debe crear un modelo para la vista con propiedades correspondientes. Teniendo en cuenta que está portando desde una página ASP.NET existente, la configuración de un nuevo modelo para cada vista/página nueva puede conllevar muchos gastos generales, en cuyo caso, incluirlo en ViewData.

Cuestiones relacionadas