1

У меня есть следующие в моем редактирования экрана:MVC UpdateModel не обновляется из DropDownList

<label for="campaign.CandidateID">Candidate:</label> 
<%= Html.DropDownList("Campaign.CandidateID", Model.Candidates, "Choose...")%> 
<%= Html.ValidationMessage("CandidateID", "*") %> 

и в моем контроллере:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, FormCollection formValues) 
{ 
    Campaign campaign = repos.GetCampaign(id); 
    try 
    { 
     UpdateModel(campaign); 
     repos.Save(); 
     return RedirectToAction("Index", "Admin"); 
    } 
    catch 
    { 
     return View(new CampaignDTO(campaign)); 
    } 

Когда я редактирую запись и изменение текстовых полей, все работает отлично , но когда я изменяю элемент, связанный с выпадающим списком, это изменение не обновляется в объекте кампании. Я проверил this.ValueProvider["Campaign.CandidateID"] и данные там!

Кстати, во время отображения экрана редактирования он выбирает правильный список кандидатов в списке выбора.

Может ли проблема возникнуть из-за того, что ValueProvider предоставляет строку, тогда как CandidateID в моем классе является int?

Я в тупике.

ответ

2

Вы также указываете имя текстового поля на «Кампания» (например, Html.TextBox («Campaign.Name»)? Когда вы вызываете UpdateModel без указания префикса, любые данные из словаря ValueProvider, содержащие префикс (т.е. «Campaign.CandidateID») не будет иметь права на привязку к объекту модели. Именно поэтому вы видите запись «Campaign.CandidateID» в словаре ValueProvider (потому что она была успешно отправлена ​​в запросе), но это не " t, привязанный к объекту вашей кампании.

+0

Нет, у моих текстовых полей не было префикса «Кампания». Поэтому я префикс их всех «Кампания» и изменил вызов UpdateModel на UpdateModel (кампания, «Кампания»), и он теперь работает! СПАСИБО. Я думаю, что меня бросили в том, что поля показывали правильные данные, это был только UpdateModel, который был ha проблема. – Wavel