none
Validar variable ActionResult Vacia. RRS feed

  • Pregunta

  • Buenas tardes a todos, necesito su ayuda urgentemente por favor.

    tengo el siguiente ActionResult en un controlador

     // busca el nombre del usuario que este registrado 
            public ActionResult GetBuscaUserName(string usernameBus)
            {
               var modelo=from p in db.Familias where p.UserName == usernameBus select p;
               return View(modelo.ToList());
            

    El cual por sentido comun si no da resultados pues esta vacia.

    Al momento de invocar este ActionResult en otro controlador, lo realizo de la siguiente forma:

                    Session["nombreUsuarioX"] = model.nombreUsuario;
                    
                    AccesoFamiliaController busca = new AccesoFamiliaController();
                    ActionResult resultado=busca.GetBuscaUserName(Session["nombreUsuarioX"].ToString());
                    if (resultado== COMO VALIDAR SI ESTA SINB DATOS O VACIO)
                    {
                    }

    Es solo una consulta que deseo hacer y no he podido validar si ESTA VACIO., con el depurador efectivamente aparece coount=0, pero no se como interpretarlo.

    Por favor ayudenme, ya estoy desesperado.

    gracias como siempre y saludos a todos.

    martes, 26 de diciembre de 2017 3:22

Respuestas

  • hola

    no es correcto lo que estas implementando, no deberias invocar un action de un controller desde otro, para eso existen las capas de negocio o persistencia

    deberias crear en tu capa de datos algo como ser

    public ActionResult GetBuscaUserName(string usernameBus)
    {
    	var modelo = familiaService.GetFamiliasByUserName(usernameBus)
    	return View(modelo.ToList());
    }
    
    
    public List<Familia> GetFamiliasByUserName(string username)
    {
    	var result = from p in db.Familias 
    				  where p.UserName == usernameBus select p;
    				
    	return result.ToList();
    }

    por supuesto GetFamiliasByUserName va en la clase de servicio,persistencia o como lo llames

    entonces donde usas el session usas el servicio y no el controller, pudiendo validar

    if (resultado.Count == 0)
    {
    }

    porque tienes una lista con la cual validar y no un actionresult

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 26 de diciembre de 2017 13:29
  • Ok, muchas gracias, tomo en cuenta tu respuesta, déjame realizar la subrutina entonces.

    Ya sabía que algo estaba hacindo mal.

    Agradezco tu atención.

    Saludos.

    martes, 26 de diciembre de 2017 14:31

Todas las respuestas

  • Para validar si está vacío lo podrías hacer así:

    ViewResult vr = resultado as ViewResult;
    List<Familias> model = vr.Model as List<Familias>;
    if (model==null || model.Count==0) ...
    Sin embargo, dicho eso, hay que señalar que no es una buena forma de estructurar el código. No tiene sentido encapsular un modelo dentro de una vista, encapsular la vista en un actionresult, y luego devolver ese objeto para usar solo el modelo doblemente encapsulado. En lugar de eso, escribe una subrutina que haga el Select y devuelva el List, y llámala desde los dos sitios.
    martes, 26 de diciembre de 2017 9:28
  • hola

    no es correcto lo que estas implementando, no deberias invocar un action de un controller desde otro, para eso existen las capas de negocio o persistencia

    deberias crear en tu capa de datos algo como ser

    public ActionResult GetBuscaUserName(string usernameBus)
    {
    	var modelo = familiaService.GetFamiliasByUserName(usernameBus)
    	return View(modelo.ToList());
    }
    
    
    public List<Familia> GetFamiliasByUserName(string username)
    {
    	var result = from p in db.Familias 
    				  where p.UserName == usernameBus select p;
    				
    	return result.ToList();
    }

    por supuesto GetFamiliasByUserName va en la clase de servicio,persistencia o como lo llames

    entonces donde usas el session usas el servicio y no el controller, pudiendo validar

    if (resultado.Count == 0)
    {
    }

    porque tienes una lista con la cual validar y no un actionresult

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 26 de diciembre de 2017 13:29
  • Ok, muchas gracias, tomo en cuenta tu respuesta, déjame realizar la subrutina entonces.

    Ya sabía que algo estaba hacindo mal.

    Agradezco tu atención.

    Saludos.

    martes, 26 de diciembre de 2017 14:31
  • Leandro, buenos días.

    Gracias por la asesoría y decirme de mis barbaridades que estoy haciendo.

    Agradezco tu ayuda y espero poder preguntar mas cosas por este foro, me ha ayudado mucho.

    Pongo en páractica lo que mencionas que coincide con la otra respuesta.

    saludos y gracias

    martes, 26 de diciembre de 2017 14:35
  • Hola Nuevamente y discukoa mi ignorancia pero necesito otra vez tu ayuda por favor.

    ya segui tus indicaciones:

    ya cree la calse que se llama AccesoP_BLL.cs

    con el siguiente código

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    using AccesoPadres.Models;
    using AccesoPadres.Controllers;
    
    namespace AccesoPadres
    {
        public class AccesoP_BLL
        {
            SIHCweb_bisEntities db = new SIHCweb_bisEntities();
            public List<Familias> GetFamiliasByUserName(string usernameBus)
            {
                var resultado = from p in db.Familias where p.UserName == usernameBus select p;
                return resultado.ToList();
            }
        }
    }

    y el controlador quedo con el actionresult como sigue:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    //
    using AccesoPadres.Models;
    using System.Data.Entity;
    //
    
    namespace AccesoPadres.Controllers
    {
        public class AccesoFamiliaController : Controller
        {
            AccesoP_BLL familiaService = new AccesoP_BLL();
            // GET: AccesoFamilia
            public ActionResult Index()
            {
                return View();
            }
    
            // busca el nombre del usuario que este registrado 
            public ActionResult GetBuscaUsername(string usernameBus)
            {
                var modelo = familiaService.GetFamiliasByUserName(usernameBus);
                return View(modelo.ToList());
            }
        }
    }

    Ahora el el controlador que quiero validar el nombre de usuario, como invoco para poder hacer el resultado.count==0?

    puse esto pero me parece que no es lo correcto, mas aparte como tu me dices que tengo que validar la lista mas no el actionresult.

    Session["nombreUsuarioX"] = model.nombreUsuario;
                    AccesoP_BLL busca = new AccesoP_BLL();
                    busca.GetFamiliasByUserName(Session["nombreUsuarioX"].ToString());

    Perdona pero estoy ampezando con el mvc, yo estaba acostumbrado la forma tradicional de aspx.

    Gracias por ayudarme y saludos.

    martes, 26 de diciembre de 2017 15:41
  • Leandro ya estuvo me faltaba ...var res=

    var res= busca.GetFamiliasByUserName(Session["nombreUsuarioX"].ToString());
                    if (res.Count == 0)
                    {
                        return RedirectToAction("Index", "SinRegistro");
                    }

    ya lo pude validar si vieno en cero o si trae datos.

    gracias.

    martes, 26 de diciembre de 2017 16:50