none
consultas sobre ActionResult Index RRS feed

  • Pregunta

  • Buenos Dias.

    Soy nuevo sobre ASP.NET MVC 5 y quisieran que me ayuden sobre estas dos consultas.

    PRIMERA CONSULTA

    public ActionResult Index()
    {
     var consulta = db.TABObras.Select(s => new { OBCodi = s.OBCodi, OBDesc = s.OBDesc }).ToList()
        .Select(s => new TABObra() { OBCodi = s.OBCodi, OBDesc = s.OBDesc }).Where(s => s.OBStat == -1).ToList();

     return View(consulta);
    }

    En este consulta quiero que solo me muestre los campos codigo(OBCodi) y descripcion(OBDesc) pero ademas que filtre la consulta

    cuando el status(OBStat) sea igual a -1. En mi caso no me muestra nada. cuando quito el where si me muestra los campos que quiero pero el filtro no me funciona.

    SEGUNDA CONSULTA

              

     public ActionResult Index(string ApellidoPaterno)
            {
                var tabtrabs = from t in db.TABTrabs.Include
                               (t => t.TABAfp).Include(t => t.TABBank)
                                              .Include(t => t.TABTCate)
                                              .Include(t => t.TABTEspe)
                                              .Include(t => t.TABTIden)
                                              .Include(t => t.TABTRegp)
                               select t;

                if (!String.IsNullOrEmpty(ApellidoPaterno))
                {
                    tabtrabs = tabtrabs.Where(s => s.TRPate.Contains(ApellidoPaterno));                
                }

                return View(tabtrabs);
            }

    Esta consulta filtra mi consulta de acuerdo a la variable ApellidoPaterno, pero como haría si deseo que al iniciar la vista esta aparezca en blanco y que espera para que se ingrese el ApellidoPaterno para recién se efectué la consulta. 

    Gracias Por su respuesta.

    miércoles, 22 de marzo de 2017 15:45

Respuestas

  • ahh ok es una lista, entonces seria

    public ActionResult index()
    {
       var tab = new List<TABTrab>();
       return View(tab);

    }

    la idea es que reuses la view, pero pasando un model sin datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta jgbaz domingo, 26 de marzo de 2017 16:26
    jueves, 23 de marzo de 2017 20:29

Todas las respuestas

  • hola

    Estas seguro que tienes registros con OBStat = -1 ? lo validaste en la tabla

    ademas no se define tantos select, solo uno

    var consulta = db.TABObras
    					.Where(s => s.OBStat == -1)
    					.Select(s => new TABObra() { OBCodi = s.OBCodi, OBDesc = s.OBDesc })
    					.ToList();

    y el ToList() va al final

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de marzo de 2017 15:49
  • >>que espera para que se ingrese el ApellidoPaterno para recién se efectué la consulta.

    pero necesitas realziar un post para que luego aplique el filtro

    o sea creas dos action

    [HttpGet]
    public ActionResult Index()
    {
    	vat tab = new TABTrabs();
    	return View(tab);
    }
    
    
    [HttpPost]
    public ActionResult Index(string ApellidoPaterno)
    {
    	var tabtrabs = from t in db.TABTrabs.Include
    				   (t => t.TABAfp).Include(t => t.TABBank)
    								  .Include(t => t.TABTCate)
    								  .Include(t => t.TABTEspe)
    								  .Include(t => t.TABTIden)
    								  .Include(t => t.TABTRegp)
    				   select t;
    
    	if (!String.IsNullOrEmpty(ApellidoPaterno))
    	{
    		tabtrabs = tabtrabs.Where(s => s.TRPate.Contains(ApellidoPaterno));                
    	}
    
    	return View(tabtrabs);
    }

    la idea es que la primera vez ingrese al action sin parametro por GET y si necesitas asignas una entidad nueva, si la idea es usar la misma view

    cuando realizas el post cuando se ingresa el filtro, alli cargara la misma view pero pasando un model cargado con los datos

    sino tambien podrias evaluar usar ajax, sino quieres que se actualice la pagina

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de marzo de 2017 15:54
  • Leandro.

    De esta forma solucione el problema.

      public ActionResult Index()
            {

                var consulta = db.TABObras.Where(s => s.OBStat == -1)
                    .Select(s => new { OBCodi = s.OBCodi, OBDesc = s.OBDesc }).ToList()
                    .Select(s => new TABObra() { OBCodi = s.OBCodi, OBDesc = s.OBDesc }).ToList();

                return View(consulta);
            }.

    Gracias.

    jueves, 23 de marzo de 2017 15:52
  • Leandro.

    al aplicar 

    public ActionResult index()
            {
                var tab = new TABTrab();
                return View(tab);

            }

    me sale el siguiente error en la vista. 

    El elemento de modelo pasado al diccionario es de tipo 'RecordGeneral.Models.TABTrab',
    pero este diccionario requiere un elemento de modelo de tipo 'System.Collections.Generic.IEnumerable`1[RecordGeneral.Models.TABTrab]'. 

    saludos.

    jueves, 23 de marzo de 2017 16:00
  • ahh ok es una lista, entonces seria

    public ActionResult index()
    {
       var tab = new List<TABTrab>();
       return View(tab);

    }

    la idea es que reuses la view, pero pasando un model sin datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta jgbaz domingo, 26 de marzo de 2017 16:26
    jueves, 23 de marzo de 2017 20:29
  • Gracias Leandro por tu apoyo.
    domingo, 26 de marzo de 2017 16:27