有没有办法构建表单的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**">
答案 0 :(得分:1)
如果您使用
Html.EditorFor(o=>o.Notes)
我认为这些项目应该使用正确的IDS进行渲染,只要您只是序列化表单,模型绑定器就会正常拾取。