使用Struct的ModelBinding问题

one*_*ill 0 asp.net-mvc modelbinders asp.net-mvc-5

我有一个ViewModel,它包含以下结构:

public struct PricesAndDiscounts
{
    public decimal FlatOff;
    public decimal UnitPrice;
    public decimal TotalDiscount;
    public decimal TotalOptions;
    public decimal TotalOrderPrice;
}
Run Code Online (Sandbox Code Playgroud)

ViewModel处于层次结构中,因此存在类型为PricesAndDiscounts的属性,该属性是DisplayRowPriceViewModel的成员,DisplayRowPriceViewModel是ManageOrderEditModel的成员:
-ManageOrderEditModel --DisplayRowPriceViewModel
.

请求的"形状"完全按照我的期望和期望(参见表单项的Fiddler截图):

在此输入图像描述

但是,在服务器上,默认的模型绑定器将结构实例化为每个成员的零.ViewModel中的其他所有内容都是由ModelBinder创建的,没有任何问题.

我是否需要为自定义结构创建自定义ModelBinder?

编辑 - 添加更多详细信息
签名是:

public ActionResult ManageOrder([FromBody]ManageOrderEditModel model)
Run Code Online (Sandbox Code Playgroud)

我在没有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; }
}
Run Code Online (Sandbox Code Playgroud)

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; }
}
Run Code Online (Sandbox Code Playgroud)

Imr*_*hid 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; }
}
Run Code Online (Sandbox Code Playgroud)

希望它能奏效.