我正在尝试将模型列表发布到服务器,使用 ASP.NET 的模型绑定并使用 JavaScript 操作一堆值。当我将值发送到服务器时,这就是我得到的:model.inventory.processed_items[0].id: GA-6570model.inventory.processed_items[0].event: model.inventory.processed_items[0].subevent: model.inventory.processed_items[0].restrict_marking: model.inventory.processed_items[0].cecp_string: model.inventory.processed_items[0].discrepancies: model.inventory.processed_items.Index: 0model.inventory.processed_items[1].id: GD-1000model.inventory.processed_items[1].event: model.inventory.processed_items[1].subevent: model.inventory.processed_items[1].restrict_marking: model.inventory.processed_items[1].cecp_string: model.inventory.processed_items[1].discrepancies: model.inventory.processed_items.Index: 1这些是我要绑定到的模型类(我省略了与问题无关的任何字段):public class PackageViewModel{ public InventoryViewModel inventory { get; set; }}public class InventoryViewModel{ public List<ProcessedItemViewModel> processed_items { get; set; }}public class ProcessedItemViewModel{ public string id { get; set; } public int @event { get; set; } public string subevent { get; set; } public string cecp_string { get; set; } public string restrict_marking { get; set; } public string discrepancies { get; set; } public string highest_classification { get; set; } public int occurences_count { get; set; } public IEnumerable<ProcessedOccurenceViewModel> occurences { get; set; }}public class ProcessedOccurenceViewModel{ public string text { get; set; } public string security_num { get; set; } public Nullable<int> media_count { get; set; } public string classification { get; set; }}这是我的控制器:[HttpGet]public ActionResult Create(){ var inventoryVM = new InventoryViewModel { processed_items = new List<ProcessedItemViewModel>() }; var packageVM = new PackageViewModel { inventory = inventoryVM }; return View(packageVM);}当我在调试器中检查 packageVM 时,这些值未绑定到视图模型。但是,在 POST 请求期间,除此嵌套模型列表之外的其他值包含在 packageVM 模型中。我不明白为什么这部分没有约束力,因为我提供了索引并且还向视图传递了一个空列表。
1 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
您发送的值的属性名称与您绑定到的模型不匹配。PackageViewModel不包含名为的属性model(它包含一个名为inventory),因此而不是
model.inventory.processed_items[0].id: GA-6570
它需要是
inventory.processed_items[0].id: GA-6570
考虑这个问题的一个简单方法是考虑如何在 POST 方法中访问模型的属性值
public ActionResult Create(PackageViewModel packageVM)
{
// get the id of the first item in processed_items
string id = packageVM.inventory.processed_items[0].id
因为方法中的参数是 named packageVM,只需删除该前缀,(即变成inventory.processed_items[0].id),这就是数据的名称,以便绑定。
作为旁注,如果您***For()在for循环中使用强类型方法来根据您的模型生成表单控件,它们将生成正确的name属性,您可以使用它$('form').serialize()来正确生成要通过 ajax 调用发送的数据.
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消