查看循环值在第一个值后不会更改

时间:2012-11-05 16:33:35

标签: c# asp.net-mvc loops

我有ICollection<String>传递给我的视图,我做了一个foreach来加载局部视图。它会循环正确的次数,但是,它传递的值是相同的,我在模型中知道情况并非如此。

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View("Index", new List<String>());
    }

    [HttpPost]
    public ActionResult Index(List<String> txtValue)
    {
        return View("Index", txtValue);
    }
}

查看:

        <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<String>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
    //Deletes the div the Control is in.
    $(".delete").live("click", function () {
        $(this).parent().remove();
    });

    //Adds the TextBoxes to divControls
    function AddTextBox(Value) {
        var elements = "<div><input name=\"txtValue\" type=\"text\" /><input type=\"button\" class=\"delete\" value=\"-\" /><br/></div>";
        $("#divControls").append(elements);
    }
    </script>

<h2>Controls!!!</h2>
<input id="btnAdd" type="button" name="Refresh" value="+" onclick="AddTextBox()" />
<% using (Html.BeginForm())
   { %>
    <input id="btnsubmit" type="submit" name="Submit" onclick="Submit" />
    <div id="divControls">
<%  
        foreach (var text in this.Model)
        { %>
            <%=Html.TextBox("txtValue", text, new { id = "Value", name = "txtValue" })%>
           <% Html.RenderPartial("TextControl", text);
        }
%>
    </div>
<% 
    } 
%>
</asp:Content>

TextControl.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %>

<div>
    <%=Html.TextBox("txtValue", this.Model, new { id = "Value", name = "txtValue" }) %>
    <input id="btn" type="button" class="delete" value="-" /><br/>
</div>

从控制器传递给视图的模型的值是正确的,即使传递给用户控件“TextControl”时值正确,但是当文本框显示时它们都只是传递的原始模型的第一个值英寸

实施例

Model as List<String> { "1", "2", "3", "4" }

传递给视图,将正确迭代每一个,将正确的字符串传递给“TextControl”以创建Html.TextBox("name", this.Model)。调试端的所有内容都显示正确,但是,当它完成所有文本框都是“1”(或列表中的第一个值)时。

以下是指向我的确切代码的链接:http://www.sendspace.com/file/sypl1u

注意: 我提出了一个仅使用<input type="text" name="txtValue" value="<%= this.Model %>" />的解决方案。

1 个答案:

答案 0 :(得分:2)

潜在问题:您正在使用ElementAt,这是LINQ方法,它为IList参数提供了特殊行为,但是您作为某些查询传递了txtValue。在这种情况下,ElementAt可能会多次枚举案例序列,如果无法重新枚举序列,甚至可能会失败。

在集合上考虑简单的foreach

    foreach (var text in Model)
    {
        Html.RenderPartial("TextControl", text);
    }