AJAX在MVC中的表单结构中发布对象

时间:2011-08-30 14:57:54

标签: asp.net-mvc-3 jquery

有没有办法构建表单的html来发布Item类的所有数据?以下是类和控制器操作:

public class Item
{
    public Item (){}

    public string Name { get; set; }
    public string Description { get; set; }
    public List<string> Tag { get; set; }
    public List<Note> Notes {get; set; }
}

public class Note
{
    public string Id { get; set; }
    public string NoteText { get; set; }
    public string OtherStuff { get; set; }
}

[HttpPost]
public ActionResult SaveItemcontroller(Item SubmittedItem)
{
    DataLayer.Save(SubmittedItem);
}

当我发布以下内容时,我的action方法会获取一个包含Name,Description和标记列表的对象:

$.ajax({ type: "POST", dataType: "json", url: $(form).attr('action'), data: $(form).serialize()});

<form method="post" action="/saveitemcontroller">
    <input id="Name" name="Name" type="text">
    <input id="Description" name="Description" type="text">
    <input name="Tag" type="text">
    <input name="Tag" type="text">
    <input name="Tag" type="text">
    <input name="Tag" type="text">
</form>

我的问题是,有没有办法构建html以在POSTed Item对象中包含Note对象?或者是在序列化后使用javascript数据对象的唯一方法吗?

                                                          

    <input name="Notes[0].Id" type="text">
    <input name="Notes[0].NoteText" type="text">
    <input name="Notes[0].OtherStuff" type="text">


    <input name="Notes[1].Id" type="text">
    <input name="Notes[1].NoteText" type="text">
    <input name="Notes[1].OtherStuff" type="text">


    <input name="Notes[2].Id" type="text">
    <input name="Notes[2].NoteText" type="text">
    <input name="Notes[2].OtherStuff" type="text">


</form>

注意:当javascript用于添加或删除新分组时,需要确保序列从零开始并增加+1而不跳过任何数字。跟踪索引数字序列的另一种方法是创建一个隐藏的索引元素,将每个分组链接在一起:

    <input name="Notes[**anythingstring**].Id" type="text">
    <input name="Notes[**anythingstring**].NoteText" type="text">
    <input name="Notes[**anythingstring**].OtherStuff" type="text">
    <input name="Notes.Index" type="hidden" value="**anythingstring**">

1 个答案:

答案 0 :(得分:1)

如果您使用

Html.EditorFor(o=>o.Notes) 

我认为这些项目应该使用正确的IDS进行渲染,只要您只是序列化表单,模型绑定器就会正常拾取。