2013-05-15 2 views
1

У меня есть форма, которая отправляется на действие контроллера Edit, а связующее устройство по умолчанию устанавливает некоторые значения в 0 ошибочно. Используемая модель представляет собой сложную модель (несколько объектов внутри нее), но я не думаю, что это проблема, потому что я попытался заполнить только один из объектов внутри собственной модели и имел ту же проблему. Также странно, что другие свойства заселяются без проблем.asp.net mvc 4 default binder привязывает определенные значения к 0

enter image description here

Как вы можете видеть на картинке, Request.Form [ «Pricelist.PricelistId»] вывешивает значение 3, но если вы посмотрите на свойства модели внутри _adminEditPricelistVM.Pricelist.PricelistId = 0.

Это 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. Прейскурант содержит список 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" /> 

Я не уверен, что еще я могу добавить. Я с нетерпением жду ваших ответов!

+0

ASP.NET MVC по умолчанию ModelBinder ищет идентификаторы HTML в запросе, который соответствует именам свойств для создания модели на сервере. Как вы создали этот HTML-код? Помощники Html? – Fals

+0

Id's? действительно? Я не знал этого. Я подражал именам, думая, что этого достаточно. Благодарю. Я отдам это. –

+0

На самом деле после просмотра моего кода PricelistId, который возвращает 0 вместо 3, имеет правильный идентификатор. Это выглядит так:

ответ

0

Thanks Fals. Проблема на самом деле оказалась моей собственной глупостью (как обычно). У меня был атрибут [Только для чтения] для этого свойства в моей модели домена, поэтому установщик не работал.

Смежные вопросы