72

List<T>パーシャルをレンダリングするビューで、かみそりの foreach ループで a を繰り返しています。パーシャルでは、ビューに 4 つの行を表示したい単一のレコードをレンダリングしています。2 つの最後の列に CSS クラスがあるため、呼び出しが 1 番目のレコードか 4 番目のレコードかをパーシャルで判断する必要があります。正しいコードを出力するためにパーシャルでこれを識別する最良の方法は何ですか?

これは、ループを含む私のメイン ページです。

@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>

}

ここでは、パスごとに更新してテキストを問題なくレンダリングできる int を作成できると思いますが、私がより心配しているパーシャルに整数値を渡しています。もっと良い方法がない限り。

ここに私の部分があります:

@{
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>

今日金髪の日を過ごしているかどうかはわかりませんが、これは驚くほど簡単ですが、int値を渡す最良の方法が思いつきません。誰かが助けてくれることを願っています.

4

11 に答える 11

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

// @{i++ を使用して値をインクリメント}

于 2014-03-13T08:40:22.830 に答える
85
//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>
}

私のブログ投稿に関する詳細情報 http://jimfrenette.com/2012/11/razor-foreach-loop-with-index/

于 2012-11-29T22:44:00.033 に答える
11

または、次のようにすることもできます。

@foreach(var myItem in Model.Members)
{    
    <span>@Model.Members.IndexOf(myItem)</span>
}
于 2016-11-17T00:55:35.100 に答える
7

Linqを使用してこのソリューションを見てください。彼の例は、3番目のアイテムごとに異なるマークアップが必要であるという点で似ています。

foreach( var myItem in Model.Members.Select(x,i) => new {Member = x, Index = i){
    ...
}
于 2012-04-26T02:43:54.143 に答える
3

CSS セレクターを使用して、最初と最後の要素にカスタム クラスをアタッチしようとする代わりにスタイルを設定しない理由はありますか? alpha または omega に基づくスタイル設定の代わりに、first-child と last-child を使用します。

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

于 2012-04-26T02:53:21.860 に答える
2

ここでは IndexOf が役に立ちそうです。

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

...

于 2015-08-13T11:10:32.663 に答える
0

私はこの拡張メソッドを使用することを好みます:

public static class Extensions
{
    public static IEnumerable<(T item, int index)> WithIndex<T>(this IEnumerable<T> self)
        => self.Select((item, index) => (item, index));
}

ソース:

https://stackoverflow.com/a/39997157/3850405

かみそり:

@using Project.Shared.Helpers 

@foreach (var (item, index) in collection.WithIndex())
{
<p>
    Name: @item.Name Index: @index
</p>
}
于 2021-02-20T16:56:10.140 に答える
0

非常にシンプル:

     @{
         int i = 0;
         foreach (var item in Model)
         {
          <tr>
          <td>@(i = i + 1)</td>`
          </tr>
         }
      }`
于 2017-07-16T03:56:09.583 に答える