Asp.net mvc 结构的模型绑定问题
我有一个ViewModel,其中包含以下结构:Asp.net mvc 结构的模型绑定问题,asp.net-mvc,asp.net-mvc-5,modelbinders,Asp.net Mvc,Asp.net Mvc 5,Modelbinders,我有一个ViewModel,其中包含以下结构: public struct PricesAndDiscounts { public decimal FlatOff; public decimal UnitPrice; public decimal TotalDiscount; public decimal TotalOptions; public decimal TotalOrderPrice; } ViewModel处于继承权中,因此有一个类型为Pri
public struct PricesAndDiscounts
{
public decimal FlatOff;
public decimal UnitPrice;
public decimal TotalDiscount;
public decimal TotalOptions;
public decimal TotalOrderPrice;
}
ViewModel处于继承权中,因此有一个类型为Prices和Discounters的属性,它是DisplayRowPriceViewModel的成员,DisplayRowPriceViewModel是ManageOrderEditModel的成员:-ManageOrderEditModel
--DisplayRowPriceViewModel 请求的“形状”正是我想要和期望的(参见Fiddler表单项截图): 但是,在服务器上,默认modelbinder将结构的每个成员实例化为零。ViewModels中的所有其他内容都是由ModelBinder创建的,没有问题 是否需要为自定义结构创建自定义ModelBinder 编辑-添加更多详细信息
签名为:
public ActionResult ManageOrder([FromBody]ManageOrderEditModel model)
我尝试过不使用FromBody属性。此外,价格和折扣是一个结构这一事实也不是问题所在。我把它改成了一个类,所有的成员都以零的形式出现,而不是你在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; }
}
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; }
}
DisplayRowPriceViewModel
public class ManageOrderEditModel
{
public DisplayOptionsInDropDownViewModel DisplayOptionsInDropDownViewModel { get; set; }
public DisplayRowPriceViewModel DisplayRowPriceViewModel { get; set; }
public int ID { get; set; }
public int RegType { get; set; }
}
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; }
}
我不知道你是怎么做到的,但你传递数据的方式似乎有问题 我刚刚创建了与您相同的模型,它成功地创建了结构并为其赋值 然后我打电话给邮递员 这是我打电话的方式。(我以Json的形式传递数据) 这是结果
另一个解决方案是在结构中生成属性而不是字段。这是@Imaran Rashid建议的。我不确定您是如何做到的,但您传递数据的方式似乎存在问题 我刚刚创建了与您相同的模型,它成功地创建了结构并为其赋值 然后我打电话给邮递员 这是我打电话的方式。(我以Json的形式传递数据) 这是结果
另一个解决方案是在结构中生成属性而不是字段。这是@Imaran Rashid建议的。您需要创建属性,而不是像这样的字段:
public struct PricesAndDiscounts
{
public decimal FlatOff { get; set; }
public int UnitPrice { get; set; }
public decimal TotalDiscount { get; set; }
public decimal TotalOptions { get; set; }
public decimal TotalOrderPrice { get; set; }
}
希望它能起作用。您需要创建属性,而不是像这样的字段:
public struct PricesAndDiscounts
{
public decimal FlatOff { get; set; }
public int UnitPrice { get; set; }
public decimal TotalDiscount { get; set; }
public decimal TotalOptions { get; set; }
public decimal TotalOrderPrice { get; set; }
}
希望它能起作用。你能分享你的行动方法签名吗?我想你是在发帖子。@Imran我已经用一些信息编辑了帖子。干杯。它是API控制器吗?@haim770否。我尝试了FromBody属性作为一个hail mary。您是否也可以共享视图模型代码,因为属性的名称在模型绑定中非常重要?您是否可以共享您的操作方法签名?我想你是在发帖子。@Imran我已经用一些信息编辑了帖子。干杯。它是API控制器吗?@haim770否。我尝试了FromBody属性作为一个冰雹玛丽。你也可以分享你的视图模型代码,因为属性的名称在模型绑定中非常重要吗?这绝对有效。谢谢我从未想过向结构中添加属性。这绝对有效。谢谢我从未想过向结构添加属性。