number net mvc index asp array asp.net-mvc asp.net-mvc-2 razor partial-views

asp.net-mvc - net - get array index in foreach c#



Obteniendo valor de índice en razor foreach (7)

Estoy iterando una List<T> en un ciclo forerch de razor en mi vista, lo que hace un parcial. En el aspecto parcial estoy renderizando un solo registro para el cual quiero tener 4 en una fila en mi opinión. Tengo una clase css para las dos columnas finales, así que necesito determinar en el parcial si la llamada es el 1er o el 4to registro. ¿Cuál es la mejor manera de identificar esto en mi parcial para dar salida al código correcto?

Esta es mi página principal que contiene el ciclo:

@foreach (var myItem in Model.Members){ //if i = 1 <div class="grid_20"> <!-- Start Row --> //is there someway to get in for i = 1 to 4 and pass to partial? @Html.Partial("nameOfPartial", Model) //if i = 4 then output below and reset i to 1 <div class="clear"></div> <!-- End Row --> </div> }

Me imagino que puedo crear un int que puedo actualizar en cada pasada y no mostrar el problema aquí, pero está pasando el valor entero a mi parcial, estoy más preocupado. A menos que haya una mejor manera.

Aquí está mi parcial:

@{ switch() case 1: <text> <div class="grid_4 alpha"> </text> break; case 4: <text> <div class="grid_4 omega"> </text> break; default: <text> <div class="grid_4"> </text> break; } <img src="Content/960-grid/spacer.gif" style="width:130px; height:160px; background-color:#fff; border:10px solid #d3d3d3;" /> <p><a href="member-card.html">@Model.Name</a><br/> @Model.Job<br/> @Model.Location</p> </div>

No estoy seguro si hoy estoy teniendo un día rubio y esto es espantosamente fácil, pero no puedo pensar en la mejor manera de pasar el valor int. Espero que alguien pueda ayudar.


¿Hay alguna razón por la que no esté utilizando selectores de CSS para aplicar estilo al primer y último elemento en lugar de intentar adjuntar una clase personalizada a ellos? En lugar del estilo basado en alfa o omega, use el primer hijo y el último hijo.

http://www.quirksmode.org/css/firstchild.html


IndexOf parece ser útil aquí.

@foreach (myItemClass ts in Model.ItemList.Where(x => x.Type == "something")) { int currentIndex = Model.ItemList.IndexOf(ts); @Html.HiddenFor(x=>Model.ItemList[currentIndex].Type)

...


Mire esta solución usando Linq. Su ejemplo es similar ya que necesitaba diferentes marcas por cada 3er artículo.

foreach( var myItem in Model.Members.Select(x,i) => new {Member = x, Index = i){ ... }


Muy simple:

@{ int i = 0; foreach (var item in Model) { <tr> <td>@(i = i + 1)</td>` </tr> } }`


O simplemente podría hacer esto:

@foreach(var myItem in Model.Members) { <span>@Model.Members.IndexOf(myItem)</span> }


@{int i = 0;} @foreach(var myItem in Model.Members) { <span>@i</span> i++; }


//this gets you both the item (myItem.value) and its index (myItem.i) @foreach (var myItem in Model.Members.Select((value,i) => new {i, value})) { <li>The index is @myItem.i and a value is @myItem.value.Name</li> }

Más información en mi blog http://jimfrenette.com/2012/11/razor-foreach-loop-with-index/