Asp.net mvc 回发后重新绑定ASP MVC2 VS2010 Beta2中的文本框列表

Asp.net mvc 回发后重新绑定ASP MVC2 VS2010 Beta2中的文本框列表,asp.net-mvc,data-binding,view,viewstate,c#-4.0,Asp.net Mvc,Data Binding,View,Viewstate,C# 4.0,所以。。我有个问题。我敢肯定几乎所有尝试MVC的人都有过。尽管如此,我在谷歌上搜索一个解决方案或为自己想出一个解决方案都没有成功 问题是:我有一个文本框列表,我想一次编辑所有文本框,我还想向列表中添加新项目。但是,文本绑定在第一次回发后失败 所以我举了一个小例子来说明这个问题: <% using (Html.BeginForm()) {%> <fieldset> <legend>Fields</legend>

所以。。我有个问题。我敢肯定几乎所有尝试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>

    <% } %>
现在,如果我清除bb字符串并在空文本框中添加“dd”,我将在newstr中得到一个返回列表“aa”、“cc”和“dd”。这将返回一个新的“aa”、“cc”、“dd”列表,这是我希望在复选框中看到的。相反,我得到:

aa
aa
aa
dd (expected empty)
所以。。有一点我根本不懂:)为什么它会忽略我的新数据模型而使用一些旧的而不是全部


我想这是asp.net遗留下来的某种viewstate,那么如何关闭它呢?我真的想要广告中的无状态网页。

有趣的问题。Html.TextBox()内部似乎存在问题。我调试了您的代码,如您所见,视图中的模型确实包含正确的列表。(顺便说一句,我在VisualStudio2008中对此进行了测试)

当你转换

<%=Html.TextBox("list", s) %>

达到标准

<input id="list" name="list" value="<%=s %>" /> 


它工作起来就像它应该工作一样。这是一个选项吗?

如果查看html源代码,您会发现这与viewstate无关。当在发布后填充输入时,框架将首先搜索发布的值,并在此基础上填充输入。这就是为什么你会在最后一次输入中得到“dd”。在其余输入中得到“aa”的原因是它们都有相同的名称。您的帖子将如下所示:

aa
bb
cc
Empty.
list=“aa”,list=“”,list=“cc”

因此,当您呈现名为“list”的输入时,框架将搜索该帖子并获取第一个匹配的值。每次都是“aa”。这就是为什么你在所有输入中都得到“aa”。您不应该有多个同名的
。使用唯一的名称,您将修复循环输入的问题

我不确定是否有办法使
不查看发布的数据。但是你可以把它改成普通的
,这样就行了。

是的,确实行。这就是诀窍。htmlhelpers就这么多了,至少现在是这样。只要可行,一切都是一种选择。谢谢你们两位:)
<input id="list" name="list" value="<%=s %>" />