我有一个与此相似的视图模型和模型
public class SupplierViewModel
{
public Supplier Supplier { get; set; }
//Select Lists and other non model properties
}
两个模特
public class Supplier
{
public string Name { get; set; }
public Contact PrimaryContact { get; set; }
public List<Contact> SecondaryContacts { get; set; }
}
public class Contact
{
public string Name { get; set; }
}
但在我看来,这些字段的前缀是类名,因此当我将它发送到Web API控制器时,它的格式如下:
{
Supplier.Name: "test",
Supplier.PrimaryContact.Name: "test",
Supplier.SecondaryContacts: [
{ Name: "test" }
]
}
当我将其发送到我的控制器时
[System.Web.Http.Route("Suppliers/{idSupplier?}")]
public HttpResponseMessage SuppliersAddOrEdit(Supplier Supplier, int idSupplier = 0)
由于前缀显然没有反序列化,目前我在发送请求之前重新格式化它
{
Name: "test",
PrimaryContact: {Name: "test"},
SecondaryContacts: [
{
Name: "test"
}
]
}
然后它绑定好了,但是我很确定当我向ActionController发送数据时它甚至没有指定Bind [(Prefix)]就知道了,例如
PrimaryContact.Name:&#34; test&#34;
将进入PrimaryContact类。如何在Web API控制器中实现相同的结果?
编辑:根据Jon Susiak的回答,我想进一步澄清
如果我使用Controller而不是ApiController我的模型,因为它会绑定JSON中的数据与前缀,有没有办法在ApiController中实现相同的东西?
答案 0 :(得分:0)
在您的视图中,您最初是在期望供应商对象的表单的POST上发送SupplierViewModel。
你可以做以下两件事之一:
a)将POST模型更改为SupplierViewModel
b)将初始模型更改为“供应商”,并将其他属性和列表放在ViewBag
中