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)
您需要创建属性而不是像这样的字段:
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)
希望它能奏效.
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |