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

我正在尝试将模型列表发布到服务器,使用 ASP.NET 的模型绑定并使用 JavaScript 操作一堆值。当我将值发送到服务器时,这就是我得到的:


model.inventory.processed_items[0].id: GA-6570

model.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: 0

model.inventory.processed_items[1].id: GD-1000

model.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 模型中。我不明白为什么这部分没有约束力,因为我提供了索引并且还向视图传递了一个空列表。


慕森王
浏览 176回答 1
1回答

一只斗牛犬

您发送的值的属性名称与您绑定到的模型不匹配。PackageViewModel不包含名为的属性model(它包含一个名为inventory),因此而不是model.inventory.processed_items[0].id: GA-6570它需要是inventory.processed_items[0].id: GA-6570考虑这个问题的一个简单方法是考虑如何在 POST 方法中访问模型的属性值public ActionResult Create(PackageViewModel packageVM){&nbsp; &nbsp; // get the id of the first item in processed_items&nbsp; &nbsp; string id = packageVM.inventory.processed_items[0].id因为方法中的参数是 named packageVM,只需删除该前缀,(即变成inventory.processed_items[0].id),这就是数据的名称,以便绑定。作为旁注,如果您***For()在for循环中使用强类型方法来根据您的模型生成表单控件,它们将生成正确的name属性,您可以使用它$('form').serialize()来正确生成要通过 ajax 调用发送的数据.
打开App,查看更多内容
随时随地看视频慕课网APP