Я не могу понять это ...
Упрощенный код, приведенный ниже, ДОЛЖЕН вставлять новое поле формы второго значения текущего времени.
Вместо этого, даже несмотря на то, что манипулирование списком происходит правильно (как проверяется в контроллере и в выходных данных отладки), представление действительно отображает дополнительный элемент, но, похоже, является просто копией значения окончательного поля (до отправки) , Это можно проверить, изменив поле перед отправкой - значения сохраняются, а новый элемент дублирует переданное окончательное значение.
Часть, которая действительно готовит мою лапшу, заключается в том, что, если я тривиально меняю операцию с Insert () на Add (), Add () работает как положено !!
Используя этот пример Модель:
public class MyViewData
{
List<string> stringData = new List<string>();
public List<string> StringData { get { return stringData; } }
}
А этот контроллер:
public class TestController : Controller
{
public ActionResult Index()
{
return View(new MyViewData());
}
[HttpPost]
public ActionResult Index(MyViewData data)
{
data.StringData.Insert(0, DateTime.Now.Second.ToString());
return View(data);
}
}
А это вид:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Forms.Controllers.MyViewData>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Test
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%
System.Diagnostics.Debug.WriteLine("---");
for (var i = 0; i < Model.StringData.Count; i++)
System.Diagnostics.Debug.WriteLine("{0}", Model.StringData[i]);
%>
<% using (Html.BeginForm()) { %>
<% for (var i = 0; i < Model.StringData.Count; i++) { %>
<%: Html.TextBoxFor(model => model.StringData[i])%></br>
<% } %>
<div><input type="submit" value="Do it" /></div>
<% } %>
</asp:Content>