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

时间:2014-03-27 16:07:43

标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller

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

  1. Group Alpha
  2. Group Bravo
  3. 控制器

    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>
    

    我的任务视图

    @model MvcApplication4.Models.TaskModel

    <div id="container">
    
            @if (Model.Groups != null)
            {
    
                foreach (var group in Model.Groups)
                {
    
                    @Html.TextBox("Groups", group, new { @id = String.Empty })                                                         
    
                }
            } 
    </div>
    

    我的任务模型

    public class TaskModel : IValidatableObject
    {
        public Guid TaskId { get; set; }
        public String Name { get; set; }
    
        public string[] Groups { get; set; }
    
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
    
            yield break;
        }
    }
    

    这只输出Group Alpha Group Alpha。问题是什么?

    对不起之前不清楚

    示例项目复制问题https://www.dropbox.com/s/s2o59cu00am3eov/MvcApplication4.zip

2 个答案:

答案 0 :(得分:3)

您发布一些名为Groups的输入字段。在处理该POST的操作方法中,您渲染使用@Html.TextBox("Groups", ...)的部分。

@Html.TextBox使用ModelState根据输入元素名称使用先前的POSTed值填充值。在这种情况下,它需要在POST中找到的第一个Groups值,即&#34; Group Alpha&#34;。

在渲染局部视图之前清除ModelState(或只是组键)。

此:

ModelState.Clear();
ModelState.Remove("Groups");

return PartialView(model);

作品。

下次尝试预先显示所有相关代码,因此我们不需要这么多评论。 : - )

答案 1 :(得分:-1)

我认为这是一个封闭问题。试试这段代码:

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