【发布时间】:2010-02-02 13:17:40
【问题描述】:
所以.. 我有一个问题。我敢肯定,几乎所有尝试过 MVC 的人都拥有它。尽管如此,我在谷歌上搜索解决方案或为自己想一个解决方案都没有成功。
问题是这样的:我有一个文本框列表,我想一次性编辑这些文本框,我还想在我的列表中添加新项目。但是,第一次回发后文本绑定失败。
所以我做了一个小例子来说明这个问题:
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<% foreach(string s in Model) { %>
<p>
<%= Html.TextBox("list",s) %>
</p>
<% } %>
<p>
<%= Html.TextBox("newstr") %>
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
控制器代码:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit()
{
return View(new List<string>() { "aa", "bb", "cc" });
}
// Remove empty strings and add the new one
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(List<string> list, string newstr)
{
List<string> res = list.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
if (!string.IsNullOrWhiteSpace(newstr))
res.Add(newstr);
return View(res);
}
所以,在第一次 GET 时,我返回 3 个字符串 aa、bb 和 cc,并获得 3 个包含它们的文本的文本框,以及用于新字符串的空文本框,如下所示:
aa
bb
cc
Empty.
现在,如果我清除 bb 字符串并在空文本框中添加“dd”,我会在 newstr 中获得“aa”、“”、“cc”和“dd”的返回列表。这将返回一个新的“aa”、“cc”、“dd”列表,这是我希望在我的复选框中看到的。相反,我得到:
aa
aa
aa
dd (expected empty)
所以.. 我没有得到一些基本的东西:) 为什么它忽略我的新数据模型并使用一些旧的而不是全部?
我想它是从 asp.net 遗留下来的某种视图状态,那么我该如何关闭它呢?我真的很想要广告中的无国籍网页。
【问题讨论】:
标签: asp.net-mvc data-binding view viewstate c#-4.0