0

ビューでネストされたforループを使用して、asp.netにドロップダウンリストと、コントローラーから渡した変数があります。ユーザーに表示される値は停車地の名前であると想定されており、値はその停車地の ID です。名前とストップIDの両方が、コントローラーからビューに渡したリストにあります。ただし、ドロップダウン リストが表示されると、リスト全体で最初のストップ名が繰り返されます。正しいストップ ID が選択されていることはわかっていますが、名前が繰り返されています。これが私のコードです:

 <select id="stop" onchange="sendInfo();">

@foreach(var blah in ViewBag.foobar)
{
  foreach (var foo in ViewBag.stops)
    { 
      <option value="@foo">@blah</option>
    }
}
 </select>

foo は正しく使用されているストップ ID ですが、blah はストップ名の名前であり、繰り返されます。私はとても近くにいるように感じますが、そこにはいません。これが十分に明確であることを願っていますが、説明がわかりにくいです。

4

2 に答える 2

2

これを試して:

        @{
            if(ViewBag.foo != null && ViewBag.blah != null && ViewBag.foo.Count == ViewBag.blah.Count)
            {
                for (int i = 0; i < ViewBag.foo.Count; i++ )
                {
                    <option value="@ViewBag.foo[i]">@ViewBag.blah[i]</option>
                }
            }
        }

また、いくつかのヒント:

  1. 関連データに 2 つのリストを使用することは適切ではありません。のような単一のプロパティを持たないのはなぜDictionary<string, string>ですか?
  2. fooblah本名じゃないですよね?
  3. 機能関連のデータには使用しないでくださいViewBag(あなたが行っているように、コントロールを作成するなど)。このような状況では、専用のビュー モデルを作成することをお勧めします
于 2012-08-29T20:49:18.010 に答える
0

あなたの言っていることはよくわかりませんが、ストップと ID の間に 1 対 1 の関係がある場合は、両方を含むクラスを作成してみませんか?

public class Stop
{
    public string Name { get; set; }
    public int Id { get; set; }
}

それらのリストを渡し、単一のループを実行します。

@{
    var stops = (IEnumerable<Stop>)ViewBag.Stops;
}

<select>
    foreach (var stop in stops)
    {
        <option value="@stop.Id">@stop.Name</option>
    }
</select>
于 2012-08-29T20:59:38.153 に答える