Estoy tratando de completar una lista desplegable de una base de datos asignada con Linq-2-SQL, usando ASP.NET MVC 2, y sigo recibiendo este error.
Estoy tan confundido porque estoy declarando una variable de tipo IEnumerable<SelectListItem>
en la segunda línea, pero el error me hace pensar que este no es el caso. Siento que esto debería ser muy simple, pero estoy luchando. Cualquier ayuda es apreciada.
Aquí están los bits interesantes de mi controlador:
public ActionResult Create()
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View();
}
Y aquí están los puntos interesantes de mi punto de vista:
<div class="editor-label">
<%: Html.LabelFor(model => model.basetype) %>
</div>
<div class="editor-field">
<%: Html.DropDownList("basetype") %>
<%: Html.ValidationMessageFor(model => model.basetype) %>
</div>
Aquí está la acción POST al enviar el formulario
// POST: /Meals/Create
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
return View(meal);
}
}
else
{
return View(meal);
}
}
Gracias.
asp.net-mvc
JBibbs
fuente
fuente
Respuestas:
Tuve el mismo problema y finalmente obtuve la respuesta ...
El problema es que en la acción POST, después de enviar el formulario, el ModelState no es válido o detecta un error en try / catch, por lo que se devuelve la Vista. Pero esta vez la Vista no se ha
ViewData["basetype"]
configurado correctamente.Debe rellenarlo nuevamente, probablemente con el mismo código utilizado anteriormente, así que repita esto:
antes de
return View(meal)
en el[HttpPost]
método.exactamente esto resolverá tu problema:
Sé que esta pregunta es muy antigua, pero vine aquí hoy con el mismo problema, por lo que podría venir aquí más tarde ...
fuente
Recibirá este error si la SelectList es nula.
fuente
ModelState.IsValid==false
modo de devolver el modeloreturn View(model)
pero no repoblar su fuente SelectList antes de regresar de la POST. Como no hay ViewState ala WebForms, no hay fuente para que el@Html.DropDown
ayudante pueda reconstruir la selección con. Debe completar esa lista de origen CADA vez que devuelva la vista al cliente, no solo en el GET.Acabo de encontrar este problema y este artículo me ayudó a superarlo : http://odetocode.com/Blogs/scott/archive/2010/01/18/drop-down-lists-and-asp-net-mvc. aspx
Lo más probable es que su colección se vuelva a llenar después de la po
fuente
Para futuros lectores, si está utilizando la maquinilla de afeitar, intente cambiar el tipo de elemento de la lista de selección de Lista a IEnumerable.
De
A
fuente
Intente agregar una cadena para el nombre de su lista desplegable como primer parámetro y saque el elemento de sus datos de vista:
Aquí también hay un método de extensión que puede usar para que la lista desplegable esté configurada en un estilo similar al de sus otros controles:
Por ejemplo
fuente
Está configurando la colección como un elemento en el diccionario ViewData e intenta recuperarla como propiedad en el modelo. Una solución simple sería hacer referencia a él de la misma manera que lo configuró:
Alternativamente, el siguiente código utiliza una vista fuertemente tipada:
Luego, en su vista fuertemente tipada:
fuente
Si usa el
Html.DropDownList()
método, puede ocurrir el mismo error si su elemento ViewData / Viewbag no está configurado, como respondió @Peto.Pero es posible que no se configure correctamente en el caso de que el elemento configurado sea el controlador, pero en la vista principal se usa una llamada viw parcial con nuevos valores ViewDataDictionary.
si tiene,
@Html.Partial("Partianame", Model,new ViewDataDictionary() { /* ... */ })
entonces su vista parcial no veráViewData
niViewBag
datos, elimine elnew ViewDataDictionary()
parámetrofuente
Para futuros lectores,
Encontré el problema hoy y no pude solucionarlo. Resultó ser realmente simple después de todo. Estaba trabajando con una tabla + vista. Cuando actualicé la tabla (agregué algunas columnas) olvidé actualizar (soltar y volver a crear) la vista, lo que me causó el problema. Espero que ayude a alguien.
fuente
Hoy recibí el mismo error y mi solución es hacer que el modelo sea "válido".
En mi caso, después de enviar el usuario haciendo clic en "guardar", obtuve el estado del modelo: no válido si el usuario ingresa "0", pero el estado del modelo será válido si el usuario ingresa "0.0".
Por lo tanto, anulo el método "IsValid" para devolver la clave de usuario verdadera incluso "0".
Espero eso ayude.
fuente