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 в моем классе является целым числом?

Я в тупике.


person Wavel    schedule 23.10.2009    source источник


Ответы (1)


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

person Jonathan Carter    schedule 23.10.2009
comment
Нет, в моих текстовых полях не было префикса Campaign. Поэтому я добавил к ним префикс Campaign и изменил вызов UpdateModel на UpdateModel(campaign, Campaign), и теперь это работает! СПАСИБО. Я думаю, что меня бросило в глаза то, что поля показывали правильные данные, проблема была только в UpdateModel. - person Wavel; 23.10.2009