MVC All DropdownListsFor are returning Error : "The value Cannot be Null, Parameter name:Items" After POST, Works Perfectly populating when GET
MVC All DropdownListsFor are returning Error : "The value Cannot be Null, Parameter name:Items" After POST, Works Perfectly populating when GET
这是我的问题,我需要帮助:(
填充下拉列表非常有效,在我的 GET 操作结果中,但是在 POST 之后,所有下拉列表的值 return 为空,我已经尝试调试并且这些值似乎在 POST 之后为空。
老实说,我不知道我在做什么 在这里错了,我在我的项目中尝试了与其他 ViewModels、Controllers 和 Views 相同的方法并且工作得很好,但在这种情况下,当我尝试 Create/Edit在 POST 之后注册,给我这个错误:[在此处输入图片描述][1]
这是我的 ViewModel
public class CrearBugsViewModel
{
public int id { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string Nombre { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
[DataType(DataType.MultilineText)]
[Display(Name = "Descripción")]
public string Descripcion { get; set; }
[DataType(DataType.Date)]
[Display(Name = "Fecha Cración")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<System.DateTime> FechaCreacion { get; set; }
public Nullable<int> UsuarioQueReporta { get; set; }
public Nullable<int> UsuarioAsignadoAlBug { get; set; }
public Nullable<int> Proyecto { get; set; }
public Nullable<int> Categoria { get; set; }
public Nullable<int> Prioridad { get; set; }
public Nullable<int> Estado { get; set; }
public Nullable<int> UltimoUsuarioQueEdito { get; set; }
[DataType(DataType.Date)]
[Display(Name = "última fecha de Edición")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<System.DateTime> UltimaFechaEdicion { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
[DataType(DataType.MultilineText)]
[Display(Name = "Ingrese su Query")]
public string query { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosQueReporta { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosAsignadoAlBug { get; set; }
public IEnumerable<SelectListItem> ListaProyectos { get; set; }
public IEnumerable<SelectListItem> ListaCategorias { get; set; }
public IEnumerable<SelectListItem> ListaPrioridades { get; set; }
public IEnumerable<SelectListItem> ListaEstados { get; set; }
public IEnumerable<SelectListItem> ListaUltimosUsuariosQueEditaron { get; set; }
}
这是我的控制器
private Bug_TrackEntities db = new Bug_TrackEntities();
CrearBugsViewModel agregarBugViewModel = new CrearBugsViewModel();
public ActionResult Crear()
{
agregarBugViewModel = new CrearBugsViewModel()
{
ListaUsuariosQueReporta = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
}),
ListaUsuariosAsignadoAlBug = db.Usuarios.Select(d => new SelectListItem
{
Value = d.id.ToString(),
Text = d.usuario
}),
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaCategorias = db.Categoria.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaPrioridades = db.Prioridad.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
};
return View(agregarBugViewModel);
}
//POST: Crear
[HttpPost]
public ActionResult Crear(CrearBugsViewModel crearBug)
{
try
{
var Bug = new Models.Bugs();
if (ModelState.IsValid)
{
Bug.Nombre = crearBug.Nombre;
Bug.Descripcion = crearBug.Descripcion;
Bug.FechaCreacion = DateTime.Now;
Bug.UsuarioQueReporta = crearBug.UsuarioQueReporta;
Bug.UsuarioAsignadoAlBug = crearBug.UsuarioAsignadoAlBug;
Bug.Proyecto = crearBug.Proyecto;
Bug.Categoria = crearBug.Categoria;
Bug.Prioridad = crearBug.Prioridad;
Bug.Estado = 1;//enviado
Bug.UltimaFechaEdicion = DateTime.Now;
Bug.UltimoUsuarioQueEdito = null;
Bug.query = crearBug.query;
db.Bugs.Add(Bug);
db.SaveChanges();
return Redirect("/Bugs/Index");
}
agregarBugViewModel = new CrearBugsViewModel()
{
ListaUsuariosQueReporta = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
}),
ListaUsuariosAsignadoAlBug = db.Usuarios.Select(d => new SelectListItem
{
Value = d.id.ToString(),
Text = d.usuario
}),
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaCategorias = db.Categoria.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaPrioridades = db.Prioridad.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
};
return View(crearBug);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
这是我的看法
@model BugTrack.Models.ViewModels.Bugs.CrearBugsViewModel
@{
ViewBag.Title = "Nuevo Bug";
}
<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("Crear", "Bugs", FormMethod.Post))
{
<div class="row">
<div class="col-lg-12">
<div>
@Html.LabelFor(d => d.Nombre)
@Html.TextBoxFor(d => d.Nombre, "", new { @class = "form-control" })
@Html.ValidationMessageFor(d => d.Nombre, null, new { @class = "rojo-errores" })
</div>
<div>
@Html.LabelFor(d => d.Descripcion)
@Html.TextBoxFor(d => d.Descripcion, "", new { @class = "form-control" })
@Html.ValidationMessageFor(d => d.Descripcion, null, new { @class = "rojo-errores" })
</div>
<div>
@Html.LabelFor(d => d.FechaCreacion)
@Html.EditorFor(model => model.FechaCreacion, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(d => d.FechaCreacion, null, new { @class = "rojo-errores" })
</div>
<div>
@Html.LabelFor(model => model.UsuarioQueReporta, "UsuarioQueReporta")
@Html.DropDownListFor(model => model.UsuarioQueReporta, new SelectList(Model.ListaUsuariosQueReporta, "Value", "Text"), "--Seleccione un usuario--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.UsuarioQueReporta, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.UsuarioAsignadoAlBug, "UsuarioAsignadoAlBug")
@Html.DropDownListFor(model => model.UsuarioAsignadoAlBug, new SelectList(Model.ListaUsuariosAsignadoAlBug, "Value", "Text"), "--Seleccione usuario asignado al bug--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.UsuarioAsignadoAlBug, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Proyecto, "Proyecto")
@Html.DropDownListFor(model => model.Proyecto, new SelectList(Model.ListaProyectos, "Value", "Text"), "--Seleccione un proyecto--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Proyecto, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Categoria, "Categoria")
@Html.DropDownListFor(model => model.Categoria, new SelectList(Model.ListaCategorias, "Value", "Text"), "--Seleccione una categoría--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Categoria, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Prioridad, "Prioridad")
@Html.DropDownListFor(model => model.Prioridad, new SelectList(Model.ListaPrioridades, "Value", "Text"), "--Seleccione prioridad--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Prioridad, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(d => d.query)
@Html.TextBoxFor(d => d.query, "", new { @class = "form-control" })
@Html.ValidationMessageFor(d => d.query, null, new { @class = "rojo-errores" })
</div>
<br />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-success" />
</div>
</div>
</div>
</div>
}
这是我过去用另一个 ViewModel、Controller、View 尝试过的方法,对我来说效果很好:
视图模型
public class CrearUsuariosAsignadosAlProyectoViewModel
{
[HiddenInput(DisplayValue = false)]
public int id { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<int> Proyecto { get; set; }
public IEnumerable<SelectListItem> ListaProyectos { get; set; }
[Display(Name = "Usuario que desea asignar al Proyecto")]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<int> Usuario { get; set; }
public IEnumerable<SelectListItem> ListaUsuarios { get; set; }
public string NombreUsuario { get; set; }
public string NombreProyecto { get; set; }
}
控制器
public ActionResult Crear()
{
crearUsuariosAsignadosAlProyectoView = new CrearUsuariosAsignadosAlProyectoViewModel
{
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaUsuarios = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
})
};
return View(crearUsuariosAsignadosAlProyectoView);
}
//POST: Crear
[HttpPost]
public ActionResult Crear(CrearUsuariosAsignadosAlProyectoViewModel agregarUsuariosAsignados)
{
try
{
var usuarioAsignado = new Models.UsuariosAsignadosAlProyecto();
if (ModelState.IsValid)
{
usuarioAsignado.Proyecto = agregarUsuariosAsignados.Proyecto;
usuarioAsignado.Usuario = agregarUsuariosAsignados.Usuario;
db.UsuariosAsignadosAlProyecto.Add(usuarioAsignado);
db.SaveChanges();
return Redirect("/UsuariosAsignadosAlProyecto/Index");
}
var listas = new CrearUsuariosAsignadosAlProyectoViewModel
{
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaUsuarios = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
})
};
return View(agregarUsuariosAsignados);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
查看
<div>
@Html.LabelFor(model => model.Proyecto, "Proyecto")
@Html.DropDownListFor(model => model.Proyecto, new SelectList(Model.ListaProyectos, "Value", "Text"), "--Seleccione un proyecto--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Proyecto, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Usuario, "Usuario")
@Html.DropDownListFor(model => model.Usuario, new SelectList(Model.ListaUsuarios, "Value", "Text"), "--Seleccione un usuario para asignar--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Usuario, "", new { @class = "text-danger" })
</div>
如您所见,首先我在 ViewModel 中声明了 Ienumerable SelectListItems 对象,然后在控制器中我从数据库中 Select 数据并将其存储在这些 SelectItems 对象中,在 GET 操作结果和 POST 中相同,然后在我看来,我将这些对象作为下拉列表传递给填充得非常好的项目,最后当用户选择选项时,它将寄存器存储在数据库中。
[1]: https://i.stack.imgur.com/rmpRY.png
return View(crearBug);
您返回的是 posted 模型,而不是 post 填满后创建的视图模型。应该是
return View(agregarBugViewModel);
在我尝试了 4 种方法来执行相同的行为并遇到相同的错误后,我决定清除我的视图模型并从零开始,这让我发现大多数情况下使用的验证 "[Required(ErrorMessage = "*Campo {0} obligatorio")]"
我的属性(包括用于从下拉列表中获取值的属性)我们正在影响 POST 行为,现在这是我的视图模型:
public int id { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string Nombre { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string Descripcion { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<System.DateTime> FechaCreacion { get; set; }
public Nullable<int> UsuarioQueReporta { get; set; }
public Nullable<int> UsuarioAsignadoAlBug { get; set; }
public Nullable<int> Proyecto { get; set; }
public Nullable<int> Categoria { get; set; }
public Nullable<int> Prioridad { get; set; }
public Nullable<int> Estado { get; set; }
public Nullable<int> UltimoUsuarioQueEdito { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> UltimaFechaEdicion { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string query { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosQueReporta { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosAsignadoAlBug { get; set; }
public IEnumerable<SelectListItem> ListaProyectos { get; set; }
public IEnumerable<SelectListItem> ListaCategorias { get; set; }
public IEnumerable<SelectListItem> ListaPrioridades { get; set; }
public IEnumerable<SelectListItem> ListaEstados { get; set; }
public IEnumerable<SelectListItem> ListaUltimosUsuariosQueEditaron { get; set; }
现在我可以像往常一样创建寄存器
这是我的问题,我需要帮助:(
填充下拉列表非常有效,在我的 GET 操作结果中,但是在 POST 之后,所有下拉列表的值 return 为空,我已经尝试调试并且这些值似乎在 POST 之后为空。 老实说,我不知道我在做什么 在这里错了,我在我的项目中尝试了与其他 ViewModels、Controllers 和 Views 相同的方法并且工作得很好,但在这种情况下,当我尝试 Create/Edit在 POST 之后注册,给我这个错误:[在此处输入图片描述][1]
这是我的 ViewModel
public class CrearBugsViewModel
{
public int id { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string Nombre { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
[DataType(DataType.MultilineText)]
[Display(Name = "Descripción")]
public string Descripcion { get; set; }
[DataType(DataType.Date)]
[Display(Name = "Fecha Cración")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<System.DateTime> FechaCreacion { get; set; }
public Nullable<int> UsuarioQueReporta { get; set; }
public Nullable<int> UsuarioAsignadoAlBug { get; set; }
public Nullable<int> Proyecto { get; set; }
public Nullable<int> Categoria { get; set; }
public Nullable<int> Prioridad { get; set; }
public Nullable<int> Estado { get; set; }
public Nullable<int> UltimoUsuarioQueEdito { get; set; }
[DataType(DataType.Date)]
[Display(Name = "última fecha de Edición")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<System.DateTime> UltimaFechaEdicion { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
[DataType(DataType.MultilineText)]
[Display(Name = "Ingrese su Query")]
public string query { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosQueReporta { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosAsignadoAlBug { get; set; }
public IEnumerable<SelectListItem> ListaProyectos { get; set; }
public IEnumerable<SelectListItem> ListaCategorias { get; set; }
public IEnumerable<SelectListItem> ListaPrioridades { get; set; }
public IEnumerable<SelectListItem> ListaEstados { get; set; }
public IEnumerable<SelectListItem> ListaUltimosUsuariosQueEditaron { get; set; }
}
这是我的控制器
private Bug_TrackEntities db = new Bug_TrackEntities();
CrearBugsViewModel agregarBugViewModel = new CrearBugsViewModel();
public ActionResult Crear()
{
agregarBugViewModel = new CrearBugsViewModel()
{
ListaUsuariosQueReporta = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
}),
ListaUsuariosAsignadoAlBug = db.Usuarios.Select(d => new SelectListItem
{
Value = d.id.ToString(),
Text = d.usuario
}),
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaCategorias = db.Categoria.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaPrioridades = db.Prioridad.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
};
return View(agregarBugViewModel);
}
//POST: Crear
[HttpPost]
public ActionResult Crear(CrearBugsViewModel crearBug)
{
try
{
var Bug = new Models.Bugs();
if (ModelState.IsValid)
{
Bug.Nombre = crearBug.Nombre;
Bug.Descripcion = crearBug.Descripcion;
Bug.FechaCreacion = DateTime.Now;
Bug.UsuarioQueReporta = crearBug.UsuarioQueReporta;
Bug.UsuarioAsignadoAlBug = crearBug.UsuarioAsignadoAlBug;
Bug.Proyecto = crearBug.Proyecto;
Bug.Categoria = crearBug.Categoria;
Bug.Prioridad = crearBug.Prioridad;
Bug.Estado = 1;//enviado
Bug.UltimaFechaEdicion = DateTime.Now;
Bug.UltimoUsuarioQueEdito = null;
Bug.query = crearBug.query;
db.Bugs.Add(Bug);
db.SaveChanges();
return Redirect("/Bugs/Index");
}
agregarBugViewModel = new CrearBugsViewModel()
{
ListaUsuariosQueReporta = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
}),
ListaUsuariosAsignadoAlBug = db.Usuarios.Select(d => new SelectListItem
{
Value = d.id.ToString(),
Text = d.usuario
}),
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaCategorias = db.Categoria.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaPrioridades = db.Prioridad.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
};
return View(crearBug);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
这是我的看法
@model BugTrack.Models.ViewModels.Bugs.CrearBugsViewModel
@{
ViewBag.Title = "Nuevo Bug";
}
<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("Crear", "Bugs", FormMethod.Post))
{
<div class="row">
<div class="col-lg-12">
<div>
@Html.LabelFor(d => d.Nombre)
@Html.TextBoxFor(d => d.Nombre, "", new { @class = "form-control" })
@Html.ValidationMessageFor(d => d.Nombre, null, new { @class = "rojo-errores" })
</div>
<div>
@Html.LabelFor(d => d.Descripcion)
@Html.TextBoxFor(d => d.Descripcion, "", new { @class = "form-control" })
@Html.ValidationMessageFor(d => d.Descripcion, null, new { @class = "rojo-errores" })
</div>
<div>
@Html.LabelFor(d => d.FechaCreacion)
@Html.EditorFor(model => model.FechaCreacion, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(d => d.FechaCreacion, null, new { @class = "rojo-errores" })
</div>
<div>
@Html.LabelFor(model => model.UsuarioQueReporta, "UsuarioQueReporta")
@Html.DropDownListFor(model => model.UsuarioQueReporta, new SelectList(Model.ListaUsuariosQueReporta, "Value", "Text"), "--Seleccione un usuario--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.UsuarioQueReporta, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.UsuarioAsignadoAlBug, "UsuarioAsignadoAlBug")
@Html.DropDownListFor(model => model.UsuarioAsignadoAlBug, new SelectList(Model.ListaUsuariosAsignadoAlBug, "Value", "Text"), "--Seleccione usuario asignado al bug--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.UsuarioAsignadoAlBug, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Proyecto, "Proyecto")
@Html.DropDownListFor(model => model.Proyecto, new SelectList(Model.ListaProyectos, "Value", "Text"), "--Seleccione un proyecto--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Proyecto, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Categoria, "Categoria")
@Html.DropDownListFor(model => model.Categoria, new SelectList(Model.ListaCategorias, "Value", "Text"), "--Seleccione una categoría--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Categoria, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Prioridad, "Prioridad")
@Html.DropDownListFor(model => model.Prioridad, new SelectList(Model.ListaPrioridades, "Value", "Text"), "--Seleccione prioridad--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Prioridad, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(d => d.query)
@Html.TextBoxFor(d => d.query, "", new { @class = "form-control" })
@Html.ValidationMessageFor(d => d.query, null, new { @class = "rojo-errores" })
</div>
<br />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-success" />
</div>
</div>
</div>
</div>
}
这是我过去用另一个 ViewModel、Controller、View 尝试过的方法,对我来说效果很好:
视图模型
public class CrearUsuariosAsignadosAlProyectoViewModel
{
[HiddenInput(DisplayValue = false)]
public int id { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<int> Proyecto { get; set; }
public IEnumerable<SelectListItem> ListaProyectos { get; set; }
[Display(Name = "Usuario que desea asignar al Proyecto")]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<int> Usuario { get; set; }
public IEnumerable<SelectListItem> ListaUsuarios { get; set; }
public string NombreUsuario { get; set; }
public string NombreProyecto { get; set; }
}
控制器
public ActionResult Crear()
{
crearUsuariosAsignadosAlProyectoView = new CrearUsuariosAsignadosAlProyectoViewModel
{
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaUsuarios = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
})
};
return View(crearUsuariosAsignadosAlProyectoView);
}
//POST: Crear
[HttpPost]
public ActionResult Crear(CrearUsuariosAsignadosAlProyectoViewModel agregarUsuariosAsignados)
{
try
{
var usuarioAsignado = new Models.UsuariosAsignadosAlProyecto();
if (ModelState.IsValid)
{
usuarioAsignado.Proyecto = agregarUsuariosAsignados.Proyecto;
usuarioAsignado.Usuario = agregarUsuariosAsignados.Usuario;
db.UsuariosAsignadosAlProyecto.Add(usuarioAsignado);
db.SaveChanges();
return Redirect("/UsuariosAsignadosAlProyecto/Index");
}
var listas = new CrearUsuariosAsignadosAlProyectoViewModel
{
ListaProyectos = db.Proyecto.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.Nombre
}),
ListaUsuarios = db.Usuarios.Select(x => new SelectListItem
{
Value = x.id.ToString(),
Text = x.usuario
})
};
return View(agregarUsuariosAsignados);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
查看
<div>
@Html.LabelFor(model => model.Proyecto, "Proyecto")
@Html.DropDownListFor(model => model.Proyecto, new SelectList(Model.ListaProyectos, "Value", "Text"), "--Seleccione un proyecto--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Proyecto, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.Usuario, "Usuario")
@Html.DropDownListFor(model => model.Usuario, new SelectList(Model.ListaUsuarios, "Value", "Text"), "--Seleccione un usuario para asignar--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Usuario, "", new { @class = "text-danger" })
</div>
如您所见,首先我在 ViewModel 中声明了 Ienumerable SelectListItems 对象,然后在控制器中我从数据库中 Select 数据并将其存储在这些 SelectItems 对象中,在 GET 操作结果和 POST 中相同,然后在我看来,我将这些对象作为下拉列表传递给填充得非常好的项目,最后当用户选择选项时,它将寄存器存储在数据库中。 [1]: https://i.stack.imgur.com/rmpRY.png
return View(crearBug);
您返回的是 posted 模型,而不是 post 填满后创建的视图模型。应该是
return View(agregarBugViewModel);
在我尝试了 4 种方法来执行相同的行为并遇到相同的错误后,我决定清除我的视图模型并从零开始,这让我发现大多数情况下使用的验证 "[Required(ErrorMessage = "*Campo {0} obligatorio")]"
我的属性(包括用于从下拉列表中获取值的属性)我们正在影响 POST 行为,现在这是我的视图模型:
public int id { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string Nombre { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string Descripcion { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public Nullable<System.DateTime> FechaCreacion { get; set; }
public Nullable<int> UsuarioQueReporta { get; set; }
public Nullable<int> UsuarioAsignadoAlBug { get; set; }
public Nullable<int> Proyecto { get; set; }
public Nullable<int> Categoria { get; set; }
public Nullable<int> Prioridad { get; set; }
public Nullable<int> Estado { get; set; }
public Nullable<int> UltimoUsuarioQueEdito { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> UltimaFechaEdicion { get; set; }
[Required(ErrorMessage = "*Campo {0} obligatorio")]
public string query { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosQueReporta { get; set; }
public IEnumerable<SelectListItem> ListaUsuariosAsignadoAlBug { get; set; }
public IEnumerable<SelectListItem> ListaProyectos { get; set; }
public IEnumerable<SelectListItem> ListaCategorias { get; set; }
public IEnumerable<SelectListItem> ListaPrioridades { get; set; }
public IEnumerable<SelectListItem> ListaEstados { get; set; }
public IEnumerable<SelectListItem> ListaUltimosUsuariosQueEditaron { get; set; }
现在我可以像往常一样创建寄存器