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