Модель обновления MVC не обновляется из DropDownList - PullRequest
1 голос
/ 23 октября 2009

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

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

Я в тупике.

1 Ответ

2 голосов
/ 23 октября 2009

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

...