使用Struct的ModelBinding问题

时间:2014-12-31 09:26:36

标签: 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处于层次结构中,因此存在类型为PriceAndDiscounts的属性,它是DisplayRowPriceViewModel的成员,DisplayRowPriceViewModel是ManageOrderEditModel的成员:
-ManageOrderEditModel
--DisplayRowPriceViewModel。

请求的“形状”完全符合我的预期和期望(参见表单项的Fiddler截图):

enter image description here

但是,在服务器上,默认的modelbinder将结构实例化为每个成员的零。 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; }
}

2 个答案:

答案 0 :(得分:5)

您需要创建属性而不是像这样的字段:

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; }
}

希望它会奏效。

答案 1 :(得分:1)

我不确定您是如何做到的,但似乎传递数据的方式存在问题。

我刚创建了与你相同的模型,它成功地创建了结构并为其赋值。

然后我打电话使用PostMan。

这是我打电话的方式。 (我以Json的身份传递数据)

enter image description here

这是结果。

enter image description here

另一个解决方案是在结构中使用属性而不是字段。这是由@Imaran Rashid建议的。

相关问题