【发布时间】:2014-12-31 09:26:36
【问题描述】:
我有一个 ViewModel,它包含以下结构:
public struct PricesAndDiscounts
{
public decimal FlatOff;
public decimal UnitPrice;
public decimal TotalDiscount;
public decimal TotalOptions;
public decimal TotalOrderPrice;
}
ViewModel 处于层次结构中,因此有一个 PriceAndDiscounts 类型的属性,它是 DisplayRowPriceViewModel 的成员,它是 ManageOrderEditModel 的成员:
-ManageOrderEditModel
--DisplayRowPriceViewModel。
请求的“形状”正是我想要和期望的(参见 Fiddler 的表单项截图):
但是,在服务器上,默认的模型绑定器将结构实例化为每个成员的零。 ViewModel 中的其他所有内容都是由 ModelBinder 创建的,没有问题。
我是否需要为我的自定义结构创建自定义 ModelBinder?
编辑 - 添加更多细节
签名是:
public ActionResult ManageOrder([FromBody]ManageOrderEditModel model)
我试过没有 FromBody 属性。此外,PriceAndDiscounts 是一个结构这一事实也不是问题所在。我将其更改为一个类,所有成员都以零的形式出现,而不是您可以在 Fiddler 中从表单中看到的值。
ManageOrderEditModel
public class ManageOrderEditModel
{
public DisplayOptionsInDropDownViewModel DisplayOptionsInDropDownViewModel { get; set; }
public DisplayRowPriceViewModel DisplayRowPriceViewModel { get; set; }
public int ID { get; set; }
public int RegType { get; set; }
}
DisplayRowPriceViewModel
public class DisplayRowPriceViewModel
{
public Discount Discount { get; set; }
public int NumberOfAdditionalLocations { get; set; }
public OrderStatus OrderStatus { get; set; }
public double Price { get; set; }
public PricesAndDiscounts PricesAndDiscounts { get; set; }
public RegType RegistrationType { get; set; }
public decimal RowPrice { get; set; }
}
【问题讨论】:
-
你能分享你的动作方法签名吗?我假设你正在向它发帖。
-
@Imran 我已经用更多信息编辑了帖子。干杯。
-
它是 API 控制器吗?
-
@haim770 不。我尝试了 FromBody 属性作为冰雹玛丽。
-
您能否分享一下您的视图模型代码,因为属性名称在模型绑定中非常重要?
标签: asp.net-mvc asp.net-mvc-5 modelbinders