如何与MVC中的List <t>进行交互</t>

时间:2010-02-24 06:52:03

标签: asp.net-mvc

我在视图中有以下代码

    <% foreach (var item in Model.stats)
       {%> 
       <label style="style="float:left;"><%= item.Stat_Caption %></label>
       <%=Html.TextBox(item.Stat_Caption,item.Stat_Value) %>

       <%} %>

我正在尝试将我的stats对象(只是一个列表集合)转换为文本框列表,以便用户可以更新它们。

我已经开始工作,如果用户更新文本框,我如何将值应用回列表集合?

1 个答案:

答案 0 :(得分:5)

您需要以表格形式包装文本框:

<% using (Html.BeginForm()) { %>
    <% foreach (var item in Model.stats)
       {%> 
       <label style="style="float:left;"><%= item.Stat_Caption %></label>
       <%=Html.TextBox(item.Stat_Caption,item.Stat_Value) %>

       <%} %>

    <input type="submit" value="Save" class="button" /></td>
<% } %>

当您按下提交按钮时,它将使用键/值对执行标准POST,如下所示:

Box1 : Hello
Box2 : World

在控制器端,您需要有一个接收POST请求的方法:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Entity entity)
{
    // code goes here
}

其中Entity是您的数据模型对象。默认的MVC模型绑定器使用反射来填充实体的字段,因此如果实体是这样的:

public class Entity()
{
    public string Box1 { get; set; }
    public string Box2 { get; set; }
}

然后Box1和Box2将被设置为POST请求中发送的值。

如果您没有实体,则可以使用:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
    // code goes here
}

其中collection是对象字典。使用这个字典的坏处是它是Object类型的字典,所以你必须抓取数据并将其转换回它应该的任何类型。