none
Como solucionar el error"El valor no puede ser nulo" RRS feed

  • Pregunta

  • Pues como el titulo lo dice, mientras hacia unas pruebas dejando algunos campos de mi formulario en blanco "por ver que salgan los mensajes de erro y todo eso" me tope con un gran problema, cada vez que "Creo" un usuario con Errores siempre me tira el mismo error sin importar los demas

    No se que podrá ser, y no he podido darle solución, así que quisiera saber si conocen alguna.

    Aqui les muestro el modelo que estoy usando

     public class CrearEmpleadoViewModel
        {

    //muestro lo que considero puede dar el problema o haya que cambiar

    [Required] [Display(Name = "Órgano o Área")] public int OrganoSelected { get; set; } public IDictionary<int, string> Organos { get; set; } [Required] [Display(Name = "Puesto")] public int PuestoSelected { get; set; } public IDictionary<int, string> Puestos { get; set; } [Required] [StringLength(25, MinimumLength = 1)] [Display(Name = "Nombre de Usuario")] [Index(IsUnique = true)] public string Usuario { get; set; }

    }

    Este es el get

    public ActionResult Agregar()
            {
                var model = new CrearEmpleadoViewModel
                {
                    Organos = new Dictionary<int, string>(),
                    Puestos = new Dictionary<int, string>()
                };
                using (var db = new sir_cjfEntities())
                {
                    model.Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo);
                    model.Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto);
                }
                return View(model);
            }

    Y este es el post

    [HttpPost] public ActionResult Agregar(CrearEmpleadoViewModel model) { if (!ModelState.IsValid) { return View(model); } var emp = new empleados(); using (var db = new sir_cjfEntities()) {

    //Muestro solo lo que considero que puede estar causando el error

    emp.id_organo = model.OrganoSelected; emp.id_puesto = model.PuestoSelected; emp.usuario = model.Usuario; if (db.empleados.Any(a => a.usuario == model.Usuario)) { ModelState.AddModelError("Usuario", "El nombre de usuario ya existe"); return View(model); } else { db.empleados.Add(emp); db.SaveChanges(); } } return Redirect(Url.Content("~/CEmpleados/")); }


    Y de esta manera tengo mi vista

    @using (Html.BeginForm("Agregar", "CEmpleados", FormMethod.Post, new { }))
            {
                @Html.LabelFor(d => d.Usuario)
                @Html.TextBoxFor(d => d.Usuario, new { @class = "form-control" })
                @Html.ValidationMessage("Usuario", new { @class = "text-danger" })
                <br />
                @Html.LabelFor(d => d.OrganoSelected)
                 @Html.DropDownListFor(d => d.OrganoSelected, new SelectList(Model.Organos, "Key", "Value"),
               new { @class = "form-control" })
                @Html.ValidationMessage("OrganoSelected", new { @class = "text-danger" })
                <br />
                @Html.LabelFor(d => d.PuestoSelected)
                @Html.DropDownListFor(d => d.PuestoSelected, new SelectList(Model.Puestos, "Key", "Value"),
               new { @class = "form-control" })
                @Html.ValidationMessage("PuestoSelected", new { @class = "text-danger" })
                <br />
            }

    En serio agradecería mucho si pudieran apoyarme a resolver este problema.

    domingo, 19 de julio de 2020 12:31

Respuestas

  • hola

    >>cada vez que "Creo" un usuario con Errores siempre me tira el mismo error sin importar los demas

    Recuerda que en el POST debes volver a cargar las listas

    public ActionResult Agregar()
    {
    	
    	using (var db = new sir_cjfEntities())
    	{
    		var model = new CrearEmpleadoViewModel
    		{
    			Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo)
    			Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto)
    		};
    		
    		return View(model);
    	}
    	
    }
    		
    [HttpPost]
    public ActionResult Agregar(CrearEmpleadoViewModel model)
    {
    	if (!ModelState.IsValid)
    	{
    		model.Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo);
    		model.Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto);
    		return View(model);
    	}
    	
    	
    	using (var db = new sir_cjfEntities())
    	{
    		model.Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo);
    		model.Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto);
    
    		var emp = new empleados();
    		emp.id_organo = model.OrganoSelected;
    		emp.id_puesto = model.PuestoSelected;
    		emp.usuario = model.Usuario;
    		
    		if (db.empleados.Any(a => a.usuario == model.Usuario))
    		{
    			ModelState.AddModelError("Usuario", "El nombre de usuario ya existe");
    			return View(model);
    		}
    
    		db.empleados.Add(emp);
    		db.SaveChanges();
    	}
    	
    	return Redirect(Url.Content("~/CEmpleados/"));
    }

    si vas a retuornar la View que usa la lista entonces debes volver a cargar los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Diego VA lunes, 20 de julio de 2020 7:16
    domingo, 19 de julio de 2020 23:46

Todas las respuestas

  • hola

    >>cada vez que "Creo" un usuario con Errores siempre me tira el mismo error sin importar los demas

    Recuerda que en el POST debes volver a cargar las listas

    public ActionResult Agregar()
    {
    	
    	using (var db = new sir_cjfEntities())
    	{
    		var model = new CrearEmpleadoViewModel
    		{
    			Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo)
    			Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto)
    		};
    		
    		return View(model);
    	}
    	
    }
    		
    [HttpPost]
    public ActionResult Agregar(CrearEmpleadoViewModel model)
    {
    	if (!ModelState.IsValid)
    	{
    		model.Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo);
    		model.Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto);
    		return View(model);
    	}
    	
    	
    	using (var db = new sir_cjfEntities())
    	{
    		model.Organos = db.organos.ToDictionary(x => x.id_organo, x => x.organo);
    		model.Puestos = db.puestos.ToDictionary(x => x.id_puesto, x => x.puesto);
    
    		var emp = new empleados();
    		emp.id_organo = model.OrganoSelected;
    		emp.id_puesto = model.PuestoSelected;
    		emp.usuario = model.Usuario;
    		
    		if (db.empleados.Any(a => a.usuario == model.Usuario))
    		{
    			ModelState.AddModelError("Usuario", "El nombre de usuario ya existe");
    			return View(model);
    		}
    
    		db.empleados.Add(emp);
    		db.SaveChanges();
    	}
    	
    	return Redirect(Url.Content("~/CEmpleados/"));
    }

    si vas a retuornar la View que usa la lista entonces debes volver a cargar los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Diego VA lunes, 20 de julio de 2020 7:16
    domingo, 19 de julio de 2020 23:46
  • Muchas gracias, yo daba por hecho que el error era la el if para verificar que no se duplicara el usuario intente, pero no me parecía lógico "ya que no tenia que ver una cosa con la otra" entonces retorne las lista por el !ModelState pero si estaba cometiendo algunos errores de todos modos, muchas gracias.
    lunes, 20 de julio de 2020 7:16
  • Hola Diego VA, 

    Gracias por confirmar que se ha encontrado una solución a la consulta realizadaDebido a elloeste hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

    Eric Ruiz

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 20 de julio de 2020 14:50
    Moderador