0

我在 asp.net 中有一个下拉列表,在视图中使用嵌套的 for 循环,以及我从控制器传递的变量。向用户显示的值应该是停靠点的名称,而值是该停靠点的 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. 对相关数据使用两个列表是不合适的。为什么你没有一个单一的属性,比如 a Dictionary<string, string>
  2. foo而且blah不是他们的真名,对吧?
  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 回答