为什么这个下拉列表没有做它应该做的事情?

时间:2012-08-29 20:43:22

标签: c# javascript asp.net

我在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是停止名称的名称,会重复。我觉得我很亲密但不太相似。我希望这很清楚,解释起来很困惑。

2 个答案:

答案 0 :(得分: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. 使用两个相关数据列表是不合适的。为什么你没有一个属性,比如Dictionary<string, string>
  2. fooblah不是他们的真名,对吗?
  3. 避免将ViewBag用于与功能相关的数据(比如正在创建控件)。对于这种情况,首选
  4. 创建专门的视图模型

答案 1 :(得分: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>