处理控制器中的多个强类型对象

时间:2009-07-17 20:30:23

标签: asp.net-mvc

不是真正的要求或其他任何东西,但你能否在控制器中做到这一点:

public ActionResult Edit(IEnumerable<Contact> contacts)
{
    //Loop through and save all records
    return View();
}

这来自于希望在表单上有多个记录, WITH NO GRID 并提交所有项目。 HTML将与此类似

<form>
    <input type="text" id="FirstName" value="Joe"/><input type="text" id="LastName" value="Smith"/><input type="hidden" id="PK" value="1"/>
    <input type="text" id="FirstName" value="Joe"/><input type="text" id="LastName" value="Smithen"/><input type="hidden" id="PK" value="2"/>
    <input type="text" id="FirstName" value="Joe"/><input type="text" id="LastName" value="Smiths"/><input type="hidden" id="PK" value="3"/>
    <input type="text" id="FirstName" value="Joe"/><input type="text" id="LastName" value="Smithy"/><input type="hidden" id="PK" value="4"/>
    <input type="text" id="FirstName" value="Joe"/><input type="text" id="LastName" value="Smithers"/><input type="hidden" id="PK" value="5"/>
<input type="submit" value="Save"/>
</form>

您是否必须创建自己的路由器或什么?任何人? Bueller?

3 个答案:

答案 0 :(得分:0)

你需要这个:

<form>
    <input type="text" name="contacts[0].FirstName" id="contacts[0].FirstName" value="Joe"/>
    <input type="text" name="contacts[0].LastName" id="contacts[0].LastName" value="Smith"/>
    <input type="hidden" name="contacts[0].PK" id="contacts[0].PK" value="1"/>
    ....
    <input type="text" name="contacts[5].FirstName" id="contacts[5].FirstName" value="Joe"/>
    <input type="text" name="contacts[5].LastName" id="contacts[5].LastName" value="Smithen"/>
    <input type="hidden" name="contacts[5].PK" id="contacts[5].PK" value="2"/>

    <input type="submit" value="Save"/>
</form>

答案 1 :(得分:0)

首先,将所有“id”替换为“name”属性。文档可能没有多个具有相同ID的元素。

关于你的问题,开箱即用是不可能的。但是解析表单值非常容易,它应该只是一个逗号分隔的字符串。

答案 2 :(得分:0)

Scott Hanselman的这篇文章详细讨论了数据绑定集合:
ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries