C# 循环似乎每次都产生相同的值

C# 循环似乎每次都产生相同的值,c#,asp.net-mvc,asp.net-mvc-3,model-view-controller,C#,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,我有一个名为Groups的字符串数组,包含以下两个字符串 阿尔法族 B组 控制器 public ActionResult Task(TaskModel model) { return PartialView(model); } 调用我的任务操作的索引视图 <div id="update"> @using (Ajax.BeginForm("Task", "Home", new AjaxOptions { UpdateTargetId = "update", Ins

我有一个名为Groups的字符串数组,包含以下两个字符串

  • 阿尔法族
  • B组
  • 控制器

    public ActionResult Task(TaskModel model)
    {
    
        return PartialView(model);
    }
    
    调用我的任务操作的索引视图

    <div id="update">
    
        @using (Ajax.BeginForm("Task", "Home", new AjaxOptions { UpdateTargetId = "update", InsertionMode = InsertionMode.Replace}))
        {
    
            <input value="Group Alpha" name="Groups"/>
            <input value="Group Bravo" name="Groups"/>
    
            <button type="submit">Submit</button>
        }
    
    </div>
    
    
    @使用(Ajax.BeginForm(“任务”、“主页”、新的AjaxOptions{UpdateTargetId=“update”,InsertionMode=InsertionMode.Replace}))
    {
    提交
    }
    
    我的任务视图

    @模型MVCAPApplication4.Models.TaskModel

    <div id="container">
    
            @if (Model.Groups != null)
            {
    
                foreach (var group in Model.Groups)
                {
    
                    @Html.TextBox("Groups", group, new { @id = String.Empty })                                                         
    
                }
            } 
    </div>
    
    
    @如果(Model.Groups!=null)
    {
    foreach(Model.Groups中的var组)
    {
    @TextBox(“Groups”,group,new{@id=String.Empty})
    }
    } 
    
    我的任务模型

    公共类TaskModel:IValidatableObject
    {
    公共Guid TaskId{get;set;}
    公共字符串名称{get;set;}
    公共字符串[]组{get;set;}
    公共IEnumerable验证(ValidationContext ValidationContext)
    {
    屈服断裂;
    }
    }
    
    这仅输出组Alpha组Alpha。问题在哪里

    对不起,我之前不清楚


    复制问题的示例项目

    我认为这是一个关闭问题。请尝试以下代码:

    <div id="container">
    
        @if (Model.Groups != null)
        {
            foreach (var group in Model.Groups)
            {
                var currentGroup = group;
                @Html.TextBox("Groups", currentGroup, new {@id = String.Empty});
            }
        } 
    </div>
    
    
    @如果(Model.Groups!=null)
    {
    foreach(Model.Groups中的var组)
    {
    var currentGroup=组;
    @TextBox(“Groups”,currentGroup,new{@id=String.Empty});
    }
    } 
    
    您发布了一些名为
    组的输入字段。在处理该帖子的操作方法中,您呈现一个使用
    @Html.TextBox(“Groups”,…)
    的分部

    @Html.TextBox
    使用ModelState根据输入元素名称,用先前发布的值填充值。在这种情况下,它采用在POST中找到的第一个
    Groups
    值,即“groupalpha”

    在渲染局部视图之前,请清除ModelState(或仅清除Groups键)

    这:

    工作


    下次试着提前显示所有相关的代码,这样我们就不需要太多的注释了。:-)

    你认为你是第一个在
    foreach
    循环中使用
    @Html.TextBox
    的人吗?这是不太可能的,所以更可能的错误是在您的代码。你确定你调用的重载正确吗?您能展示一下如何填写
    Model.Groups
    ?你能打印
    @Html.Raw(group)
    ?很有可能你正在使用的
    IEnumerable
    被编写成在迭代时会改变结果,一个常见的例子是在循环变量C#5.0之前关闭,尽管肯定还有其他方法可以制造像这样的真正邪恶的迭代器。@JoachimIsaksson关闭循环变量的问题不会出现在显示的代码中;它将在
    组的实现中
    。这里的代码将评估循环体中的任何lambda。你可以说你看到它工作了,但我不相信,因为对我来说,它工作得像预期的那样。请更新您的问题,以显示实际将此模型返回到视图的代码。试试像我这样的硬编码模型。我们真的无法按原样处理您的问题。@heymega鉴于问题显然与您所展示的代码无关,请向我们展示我们要求查看的代码,而不仅仅是告诉我们“它是正确的”。显然不是,或者其他地方不对劲。不过,显示的代码不会复制您的问题。他没有关闭显示代码中的变量,即使他关闭了,也不会产生指定的问题(不可能导致第一个项目打印两次;最多可能导致最后一个项目打印两次)。问题出在其他地方的代码中。@Servy-你能解释一下他是如何不关闭变量的吗?你能解释一下他是如何关闭变量的吗?因为没有匿名方法,这是在C#中创建闭包的唯一方法。我假设它在
    @Html.TextBox
    方法中,因为它在他的代码中不可见。那个,或者剃刀。我不完全确定,这就是为什么我说我想而不是我知道。我只是想帮点忙。啊,实际上我在另一个动作中有这样的动作:(谢谢你的帮助,但我已经尽了最大的努力。它的公司代码,所以我必须首先重构它:(@CodeCasterv-这不是一个缺陷吗?为什么它要基于输入元素名?拥有多个同名元素是完全合法的,这是有效的。)(您可以从代码中完全读取值),但这不是PHP,也不是处理同一属性的值列表的方式。请参阅如何使用MVC实现相同的行为。我完全了解您的来历,但如果是这样的话,defaultmodelbinder不应基于此处提到的相同名称绑定集合-感谢您的帮助,尽管这很有压力把我弄出来:)
    <div id="container">
    
        @if (Model.Groups != null)
        {
            foreach (var group in Model.Groups)
            {
                var currentGroup = group;
                @Html.TextBox("Groups", currentGroup, new {@id = String.Empty});
            }
        } 
    </div>
    
    ModelState.Clear();
    ModelState.Remove("Groups");
    
    return PartialView(model);