ASP MVC 3 DropDown список в режиме редактирования - PullRequest
0 голосов
/ 19 июня 2011

Привет, ребята, новичок в asp mvc, поэтому у меня возникла проблема с DropDown в режиме редактирования:

The ViewData item that has the key 'ProvinciaID' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.

Провинция Модель:

public class Provincia
    {
        public int ProvinciaID { get; set; }
        [DisplayName("Provincia")]
        [Required(ErrorMessage = "Provincia es requerida")]
        public string ProvinciaNombre { get; set; }
    }

Registro Модель:

public class Registro
    {
        public int ID { get; set; }
        ....

        [DisplayName("Provincia")]
        [Required]
        public int ProvinciaID { get; set; }
        public List<Provincia> rProvincia { get; set; }
        ....
}

Контроллер

public ActionResult Edit(int id)
        {
            Registro registro = db.Registros.Find(id);

            ViewBag.provincias = new SelectList(db.Provincias, "ProvinciaID", "ProvinciaNombre", registro.ProvinciaID);            

            return View(registro);
        }

View

<div class="editor-label">
            @Html.LabelFor(model => model.ProvinciaID)
        </div>
        <div class="editor-field">
            @Html.DropDownList("ProvinciaID", (IEnumerable<SelectListItem>)ViewData["provincias"]))
            @Html.ValidationMessageFor(model => model.ProvinciaID)
        </div>

Есть идеи?

Спасибо, ребята

1 Ответ

2 голосов
/ 19 июня 2011

Проблема в том, что вы используете это представление «Правка» (которое вы показали в своем вопросе) в каком-либо другом действии контроллера, а это другое действие контроллера не устанавливает ViewBag.provincias. Вы должны всегда устанавливать ViewBag.provincias, если хотите использовать это представление. Я предполагаю, что это другое действие контроллера - это то, которое вы отправляете в форму:

[HttpPost]
public ActionResult Edit(Registro registro)
{
    if (!ModelState.IsValid)
    {
        // I guess that here you are trying to redisplay the Edit view
        // but you forgot to set ViewBag.provincias as you did in the
        // GET Edit action and an exception is thrown because the Edit view
        // always expects ViewBag.provincias to be set

        // So set it before returning to the same view:

        ViewBag.provincias = new SelectList(db.Provincias, "ProvinciaID", "ProvinciaNombre", registro.ProvinciaID);

        return View(registro);
    }
    return RedirectToAction("Success");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...