getenumerator - ienumerable c# foreach
foreach o Repeater-¿cuál es mejor? (5)
Estoy construyendo un sitio web en ASP.Net, usando MVC, y necesito enumerar un conjunto de resultados. Ambos trabajos funcionan como yo quiero, pero me pregunto cuál es más rápido, más limpio y / o mejor, o si otra opción sería más apropiada.
Nota: ViewData.Model
es de tipo IEnumerable<Thing>
y necesito mostrar más atributos que Name
- He recortado el código para este ejemplo.
<% foreach (var thing in ViewData.Model)
{ %>
<p><%= thing.Name %></p>
<% }; %>
<% rptThings.DataSource = ViewData.Model;
rptThings.DataBind(); %>
<asp:Repeater ID="rptThings" runat="server">
<ItemTemplate>
<p><%# DataBinder.Eval(Container.DataItem, "Name") %></p>
</ItemTemplate>
</asp:Repeater>
Aquí hay otra opción . No he usado esto yo mismo, pero parece interesante.
Utilizo el repetidor del método de extensión de Phil Haack. Lo mejor de ambos mundos. http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx
foreach
es definitivamente más rápido, si no específicamente arruinas algo. Repeater
es más limpio, por supuesto, y separa más nítidamente la interfaz de usuario y la lógica. A veces necesitas más condiciones (aparte de las diferentes filas pares e impares) para renderizar tus cosas correctamente, lo que hace que foreach
sea la única opción.
Personalmente prefiero Repeater
para situaciones normales y foreach
para otras más complejas.
EDITAR: Estaba hablando de ASP.NET simple con WebControls. Para MVC e incluso páginas que en su mayoría son generadas por código, estoy de acuerdo en que foreach es más directo y más limpio.
foreach
es el camino a seguir para ASP.NET MVC. ¿Por qué? Personalmente, evito los controles heredados asp:xxx
... porque posiblemente podrían tener la exageración que existe con el modelo de formularios web. En segundo lugar, ¿qué pasa con todos los event delegates
que tiene que conectar? estás empezando a mezclar y combinar arquitecturas, IMO, por lo que esto podría conducir seriamente a un verdadero código de spagetti con un mantenimiento loco y problemas de soporte. (IMO: DataBinder.Eval == muy malo :( :( :()
El único control asp:xxx
uso es el mastpage / content control
(porque no hay alternativas).
Por último, hacer foreach
en asp.net mvc NO es un código spagetti, como muchas personas creen. Sé que lo hice cuando vi por primera vez la demo inicial de mvc. En todo caso, hace que la interfaz de usuario sea mucho más limpia que antes, mucho más fácil de mantener. IMO, código de spagetti es cuando tienes muchos <% .. %>
haciendo lógica de negocios y lógica ui y acceso (dg) db. Recuerda, eso es lo que hicieron los píos en el salvaje oeste de asp.net classic : P
Resumen
Seguir con foreach
y evitar el uso de controles de formularios web: es simple, muy eficiente y muy posible de hacer.
<p each="var item in ViewData.Model">${item.Name}</p>
Mmm, sabrosa chispa .