为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET 嵌套模型列表未绑定

ASP.NET 嵌套模型列表未绑定

C#
慕森王 2021-11-21 10:54:34
我正在尝试将模型列表发布到服务器,使用 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 调用发送的数据.


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信