1

ビューに渡されて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 %>" />代わり に使用するだけの解決策を思いつきました。

4

1 に答える 1

2

潜在的な問題: ElementAtIList 引数の特別な動作を好む LINQ メソッドを使用していますが、txtValueクエリの結果として渡しています。この場合ElementAt、シーケンスが複数回列挙される場合があり、シーケンスを再列挙できない場合は失敗することさえあります。

foreach代わりに、コレクションを単純にすることを検討してください。

    foreach (var text in Model)
    {
        Html.RenderPartial("TextControl", text);
    }
于 2012-11-05T16:44:11.713 に答える