asp.net mvc 4默认模型绑定器将某些值设置为0

时间:2013-05-15 20:15:07

标签: asp.net-mvc-4

我有一个发布到编辑控制器操作的表单,默认模型绑定器正在错误地将某些值设置为0。正在使用的模型是一个复杂的模型(其中有多个对象),但我认为他不是问题,因为我尝试只在其自己的模型中填充其中一个对象并遇到同样的问题。同样奇怪的是,其他属性正在填充而没有问题。

enter image description here

从图像中可以看出,Request.Form [“Pricelist.PricelistId”]的值是3,但是如果你查看_adminEditPricelistVM.Pricelist.PricelistId = 0中的model属性。

这是ViewModel:

public class adminEditPricelistVM
{
    public Pricelist Pricelist { get; set; } //holds the current pricelist

    public List<adminEditProductsPricelistProductsVM> PPPVMs { get; set; } //this is the model that contains a Product object and a PricelistProduct object  PPPVMs = PPPVMs

    public List<PricingFormula> PricingFormulas { get; set; } // this will be populated by all the PricingFormulas that apply to this pricelist

    public List<ProductCategory> ProductCategories { get; set; } //this will be used to filter the PPPVMs and the PricingFormulas by category in the view
}

这是一些HTML(非常标准,在这里):

<form action="/pricelist/edit/3" method="post">
    <input data-val="true" data-val-number="The field Pricelist ID must be a number." data-val-required="The Pricelist ID field is required." id="Pricelist_PricelistId" name="Pricelist.PricelistId" type="hidden" value="3" />

唯一值得一提的是,我对Pricelist对象中的集合项使用非顺序索引。一个Pricelist包含一个PricelistProducts列表,PricelistProducts包含一个PricelistProductOptions列表,PricelistProductOptions包含一个PricelistProductOptionsDetails列表。这些格式在HTML中格式如下:

<input id="Pricelist_PricelistProducts_Index" name="Pricelist.PricelistProducts.Index"     type="hidden" value="1" />
<input id="Pricelist_PricelistProducts_1__PricelistId" name="Pricelist.PricelistProducts[1].PricelistId" type="hidden" value="3" />                        

<input checked="checked" id="1" name="Pricelist.PricelistProducts[1].ProductId" onclick="toggleProductChkBx(this,1)" type="checkbox" value="1" /><input name="Pricelist.PricelistProducts[1].ProductId" type="hidden" value="false" />

<input id="Pricelist_PricelistProducts_Index" name="Pricelist.PricelistProducts.Index" type="hidden" value="2" />
<input id="Pricelist_PricelistProducts_2__PricelistId" name="Pricelist.PricelistProducts[2].PricelistId" type="hidden" value="3" />                        

<input id="2" name="Pricelist.PricelistProducts[2].ProductId" type="checkbox" value="2" /><input name="Pricelist.PricelistProducts[2].ProductId" type="hidden" value="false" />

我不确定我还能添加什么。我期待着你的回复!

1 个答案:

答案 0 :(得分:0)

谢谢Fals。问题实际上是我自己的愚蠢(像往常一样)。我的域模型中的该属性有[Read Only]属性,因此setter无法正常工作。