Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';这个下拉列表不做它应该做的吗?_C#_Javascript_Asp.net - Fatal编程技术网

C# 为什么';这个下拉列表不做它应该做的吗?

C# 为什么';这个下拉列表不做它应该做的吗?,c#,javascript,asp.net,C#,Javascript,Asp.net,在asp.net中,我有一个下拉列表,在视图中使用嵌套for循环,以及我使用的变量 从控制器传递。向用户显示的值应该是站点的名称,该值是该站点的id。名称和停止ID都在我从控制器传递到视图的列表中。但是,当显示下拉列表时,将对整个列表重复第一个停止名称。我知道正在选择正确的站点id,但名称正在重复。这是我的密码: <select id="stop" onchange="sendInfo();"> @foreach(var blah in ViewBag.foobar) { f

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

@foreach(ViewBag.foobar中的变量blah)
{
foreach(ViewBag.stops中的变量foo)
{ 
@废话
}
}
foo是正确使用的停止id,但blah是重复的停止名称的名称。我觉得我离得很近,但不太近。我希望这足够清楚,解释起来很混乱。

试试这个:

        @{
            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>
                }
            }
        }
@{
if(ViewBag.foo!=null&&ViewBag.blah!=null&&ViewBag.foo.Count==ViewBag.blah.Count)
{
对于(int i=0;i
此外,还有一些提示:

  • 对相关数据使用两个列表是不合适的。为什么没有一个属性,比如
    字典
  • foo
    blah
    不是他们的真名,对吗
  • 避免对功能相关数据使用
    ViewBag
    (如您正在创建控件)。对于这种情况,最好创建专门的视图模型

  • 我不确定我理解你的意思,但是如果stops和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>
    
    @{
    var stops=(IEnumerable)ViewBag.stops;
    }
    foreach(var停止在停止中)
    {
    @住手,叫什么名字
    }
    
    您的代码正在执行它应该执行的操作。您想更改什么?blah不断重复它自己它不断重复ViewBag.foobar中blah列表中的第一个元素。是正确的,会遍历foo列表中的每个值,但@blah不会迭代。非常确定应该是Count,长度是字符串,但foo将是列表或类似的。我同意。看起来原始代码是选择一个站点名称,然后沿着该名称输出所有站点编号,反之亦然。索引应该是成对的。理想情况下,我会创建一个包含字符串和数字表示的类/结构,这样就不会出现排序顺序不一样的奇怪情况,或者在一个列表之前添加了一些东西等等@Mike我同意它可以设计得更好。但是,我通常不会给出“您应该更改代码”这样的答案,我更愿意关注所描述的问题。我尝试了您的建议,但对于其中包含for(…)的行,我得到了“无法对空引用执行运行时绑定”。@Amanda_Panda您是否将
    长度
    更改为其他内容?什么是
    foo
    ,一个
    列表
    ?@AndreCalil是的,foo和blah都是列表,而且都有非常可怕的名字。谢谢,我终于根据你使用类数组的想法实现了这一点。它还帮助简化了我的代码,并促使我使用更好的名称。