0
我無法理解這一點......ASP.NET MVC2 InputHelper和List.Insert()奇怪的行爲
下面的簡化代碼應該插入當前時間的第二個值的一種新形式的領域。
相反,即使列表操作正確發生(在控制器和調試輸出中可驗證),View確實會呈現附加元素,但似乎只是最終字段值的副本(提交之前)。這可以通過在提交之前更改字段來驗證 - 價值堅持和新元素是提交的最終值的副本。
真正地烹飪我的麪條的部分是,如果我平凡地將操作從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>
嗯。好。我不明白這樣做的動機,但我可以看到它會如何產生這種效果。是否可以在綁定完成後清除發佈的數據,以便視圖從頭開始每個響應? – 2010-11-10 16:40:57
好的,有機會嘗試它。控制器中的ModelState.Clear()使其工作。謝謝! – 2010-11-10 22:20:03