none
ayuda con buscador de 3 entidades y Edición en una entidad en una sola vista RRS feed

  • Pregunta

  • Amigos necesito nuevamente de su ayuda les pongo lo que quiero hacer

    1.- un buscador que acepte de 1 a 3 datos de diferentes entidades ( 2 autocomplementar y 1 mas de captura)

    2.- Después pasar únicamente el id de esos datos al modelo para poder realizar la búsqueda.

    3.- la relación únicamente me devuelve un registro de lado muchos por ejemplo el id 5280 tiene 3 registro de pregunta y unánimemente me esta regresando el ultimo.

    4. al presionar el botón  verde que pueda modificar la entidad de respuesta y se vea reflejado el cambio en el index.

    Pongo el codigo de Index.

    @model SISTEMADBT.Models.PreguntasFiltro
    @using PagedList.Mvc;
    @{
        ViewBag.Title = "Consulta de Preguntas";
    }
    @using (Html.BeginForm("Index", "Preguntas", FormMethod.Get))
    {
        @Html.ValidationSummary()    
        <div class="form-group well well-sm">
            <div class="row">
                <div class="col-md-3">
                    <div class="form-group">
                        @Html.LabelFor(model => model.NOLICITACION, htmlAttributes: new { @class = "control-label" })
                        @Html.EditorFor(model => model.NOLICITACION, new { htmlAttributes = new { @class = "form-control", placeholder = "Proc. Contratación", autocomple = false } })
                        @Html.HiddenFor(model => model.LICITACIONID)
                    </div>
                </div>
    
                <div class="col-md-3">
                    <div class="form-group">
                        @Html.LabelFor(model => model.RAZON_SOCIAL, htmlAttributes: new { @class = "control-label" })
                        @Html.EditorFor(model => model.RAZON_SOCIAL, new { htmlAttributes = new { @class = "form-control", placeholder = "Licitante" } })
                        @Html.HiddenFor(model => model.PROVEEDORID)
                    </div>
                </div>
                <div class="col-md-2">
                    <div class="form-group">
                    @Html.LabelFor(model => model.PREGUNTAID, htmlAttributes: new { @class = "control-label" })
                    @Html.EditorFor(model => model.PREGUNTAID, new { htmlAttributes = new { @class = "form-control", placeholder = "Id" } })
                        @Html.ValidationMessageFor(model => model.PREGUNTAID, "", new { @class = "text-danger" })
                    </div>
                </div>
    
                <div class="col-md-3">
                    <div class="form-group">
                        <br>
                        <button type="submit" values="Filtar" class="btn btn-primary">
                            <span class="glyphicon glyphicon-search"></span>
                        </button>
                    </div>
                </div>
            </div>
        </div>
    }
    
    
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table class="table table-bordered table-hover" style="font-size:0.8em">
        <tr>
            <th>
                ID
                @*@@Html.DisplayNameFor(model => model.PreguntarSearch.FirstOrDefault().PREGUNTAID)*@
            </th>
            <th>
                @Html.DisplayNameFor(model => model.PreguntarSearch.FirstOrDefault().NUMERALES.DESCRIPCIONNUMERAL)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.PreguntarSearch.FirstOrDefault().NUMPREGUNTA)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.PreguntarSearch.FirstOrDefault().MPROVEEDOR.RAZON_SOCIAL)
            </th>
    
            <th>
                @Html.DisplayNameFor(model => model.PreguntarSearch.FirstOrDefault().PREGUNTA)
            </th>
            <th>
                RESPUESTA
            </th>
            
                <th>
                    Acciones
                </th>
       
        </tr>
    
        @foreach (var item in Model.PreguntarSearch)
         
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.PREGUNTAID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.NUMERALES.DESCRIPCIONNUMERAL)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.NUMPREGUNTA)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.MPROVEEDOR.RAZON_SOCIAL)
                </td>
                <td class="col-md-4" style="text-align:justify">
                    @*@@Html.DisplayFor(modelItem => item.PREGUNTA)*@
                    @Html.Raw(Html.Encode(item.PREGUNTA).Replace("\r\n", "<br/>"))
                </td>
                <td class="col-md-4" style="text-align:justify">
                    @Html.DisplayFor(modelItem => item.Respuestas.FirstOrDefault().RESPUESTA)
                </td>
    
                @if (item.LICITACION.ACTIVO)
                {
                    <td class=" col-xs-1 col-sm-1 col-md-1 col-lg-1">
    
                        <a data-modal='' class="btn btn-default btn-info btn-xs" href="~/Preguntas/Edit/@item.PREGUNTAID" title="Editar Pregunta">
                            <i class="glyphicon glyphicon-pencil"></i>
                        </a>
    
                        <a data-modal='' class="btn btn-default btn-success btn-xs" href="~/Preguntas/CapturarPregunta/@item.PREGUNTAID" title="Capturar Respuesta">
                            <i class="glyphicon glyphicon-file"></i>
                        </a>
    
                        <a data-modal='' class="btn btn-default btn-danger btn-xs" href="~/Preguntas/Details/@item.PREGUNTAID" title="Eliminar">
                            <i class="glyphicon glyphicon-trash"></i>
                        </a>
    
                    </td>
                }
            </tr>
        }
    </table>
    <div class="pagination-container">
        Pagina @(Model.PreguntarSearch.PageCount < Model.PreguntarSearch.PageCount ? 0 : Model.PreguntarSearch.PageNumber) de @Model.PreguntarSearch.PageCount
        @Html.PagedListPager(Model.PreguntarSearch, Page => Url.Action("Index", new RouteValueDictionary()
              {
                   { "Page", Page},
                   { "LICITACIONID", Model.LICITACIONID},
                   { "PROVEEDORID", Model.PROVEEDORID},
                   { "PREGUNTAID", Model.PREGUNTAID}
              }))
    </div>
    
    <!-- modal placeholder para vista parciales showmodal-->
    <div id='myModal' class='modal fade in'>
        <div class="modal-dialog" id="ShowMedida">
            <div class="modal-content">
                <div id='myModalContent'></div>
            </div>
        </div>
    </div>
    
    @section scripts {
        <script type="text/javascript" language="javascript">
            $(document).ready(function () {
                $("#NOLICITACION").autocomplete({
                    source: function (request, response) {
                        $.ajax({
                            url: "/Licitacions/ListarLicitacion",
                            data: { Prefix: request.term },
                            dataType: 'json',
                            type: 'POST',
                            success: function (data) {
                                response($.map(data, function (item) {
                                    return {
                                        label: item.NOLICITACION,
                                        value: item.LICITACIONID
                                    }
                                }));
                            }
                        })
                    },
                    select: function (event, ui) {
                        event.preventDefault();
                        $("#NOLICITACION").val(ui.item.label);
                        //$(this).val(ui.item.label);
                        $('#LICITACIONID').val(ui.item.value);
                        return false;
                    },
                    minLength: 3
                });
            });
        </script>
    
    <script type="text/javascript" language="javascript">
        $(document).ready(function () {
            $("#RAZON_SOCIAL").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "/Proveedores/ListarProveedores",
                        data: { Prefix: request.term },
                        dataType: 'json',
                        type: 'POST',
                        success: function (data) {
                            response($.map(data, function (item) {
                                return {
                                    label: item.RAZON_SOCIAL,
                                    value: item.MPROVEEDORID
                                }
                            }));
                        }
                    })
                },
                select: function (event, ui) {
                    event.preventDefault();
                    $("#RAZON_SOCIAL").val(ui.item.label);                
                    $('#PROVEEDORID').val(ui.item.value);
                    return false;
                },
                minLength: 3
            });
        });
    </script>
    
    }
    
    

    La entidad para la busqueda. 

    using PagedList;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Web;
    
    namespace SISTEMADBT.Models
    {
        [NotMapped]
        public class PreguntasFiltro
        {
            public int? Page { get; set; }
    
            public int? TotalRegistros { get; set; }
    
            public int PROVEEDORID { get; set; }
    
            [Display(Name = "Licitante")]
            public string RAZON_SOCIAL { get; set; }
    
            public int LICITACIONID { get; set; }
    
            [Range(0, int.MaxValue, ErrorMessage = "{0} deber ser numerico")]
            [Display(Name="Id Pregunta")]
            public int PREGUNTAID { get; set; }     
    
            [Display(Name = "Procedimiento Contratación")]
            public string NOLICITACION { get; set; }
    
            public IPagedList<PREGUNTAS> PreguntarSearch { get; set; }
    
        }
    }


    Entidad Pregunta

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace SISTEMADBT.Models
    {    
        public partial class PREGUNTAS
        {
            public PREGUNTAS()
            {
                this.PREGUNTASADJUNTOS = new List<PREGUNTAADJUNTOS>();           
                this.Respuestas = new List<RESPUESTAS>();
            }
    
            [Key]
            public int PREGUNTAID { get; set; }
    
            [Display(Name="Fecha de Registro")]
            public Nullable<System.DateTime> FECHAREGISTRO { get; set; }
    
            [Display(Name="Usuario")]
            public Nullable<int> USUARIOID { get; set; }
    
            [Display(Name="Núm. Procedimiento")]
            //[Required(ErrorMessage = "El campo {0}  es Requerido")]
            public Nullable<int> LICITACIONID { get; set; }
    
            [Display(Name="Numeral")]
            [Required(ErrorMessage = "{0} es Requerido")]
            [Range(1, 99999, ErrorMessage = "{0} es Requerido")]
            public int NUMERALID { get; set; }
    
            [Display(Name="Licitante")]
            [Required(ErrorMessage = "{0} es Requerido")]
            public int MPROVEEDORID { get; set; }
    
            [Display(Name="Núm Pregunta")]
            [Required(ErrorMessage = "{0} es Requerido")]
            [Range(1, 99999, ErrorMessage = "{0} debe ser mayor a 1")]
            public Nullable<int> NUMPREGUNTA { get; set; }
            
            [Display(Name="Pregunta/Duda/Comentario")]
            [Required(ErrorMessage = "{0} es Requerido")]
            [DataType(DataType.MultilineText)]
            public string PREGUNTA { get; set; }
    
            [Display(Name="Tipo Pregunta")]
            [Required(ErrorMessage = "{0} es Requerido")]
            [MaxLength(1)]
            public string TIPOPREGUNTA { get; set; }
    
            
            /*Relaciones*/
            public virtual LICITACION LICITACION { get; set; }
            public virtual MPROVEEDOR MPROVEEDOR { get; set; }
            public virtual NUMERALES NUMERALES { get; set; }
    
            public virtual ICollection<PREGUNTAADJUNTOS> PREGUNTASADJUNTOS { get; set; }      
            public virtual ICollection<RESPUESTAS> Respuestas { get; set; }
    
        }
    }
    

    Entidad Respuestas

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace SISTEMADBT.Models
    {
        public partial class RESPUESTAS
        {
            public int RESPUESTAID { get; set; }
    
            public Nullable<System.DateTime> FECHACONTES { get; set; }
    
            public int USUARIOID { get; set; }
    
            public int PREGUNTAID { get; set; }
    
            [DataType(DataType.MultilineText)]
            [Display(Name="Respuesta")]
            public string RESPUESTA { get; set; }
    
            public string NOMBREARCH { get; set; }
    
            public Nullable<int> LONG { get; set; }
    
            public byte[] DATOARCHIVO { get; set; }
    
            /*Relaciones*/
            public virtual PREGUNTAS PREGUNTA { get; set; }
            public virtual USUARIO USUARIO { get; set; }
        }
    }
    

    y el controlador

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;
    using SISTEMADBT.Models;
    using SISTEMADBT.Helpers;
    using PagedList;
    using PagedList.Mvc;
    
    namespace SISTEMADBT.Controllers
    {  
        
        public class PreguntasController : Controller
        {                 
            private DBTContext db = new DBTContext();
    
            
    
            [HttpGet]
            public ActionResult Index(PreguntasFiltro Model)
            {            
                const int RegistrosPagina = 30;
    
                var Preguntas = db.Preguntas
                                .Include(i => i.NUMERALES)
                                .Include(i => i.PREGUNTASADJUNTOS)
                                .Include(i => i.LICITACION)
                                .Include(i => i.MPROVEEDOR)
                                .Include(i => i.Respuestas)
                                .ToList();
                
                   
    
                if (Model.LICITACIONID != 0)
                {
                    Preguntas = Preguntas
                        .Where(l => l.LICITACIONID == Model.LICITACIONID) 
                        .ToList();
                }
    
    
                if (Model.PROVEEDORID != 0)
                {
                    Preguntas = Preguntas
                        .Where(l => l.MPROVEEDORID == Model.PROVEEDORID)
                        .ToList();
                }
    
                if (Model.PREGUNTAID != 0)
                {
                    Preguntas = Preguntas
                        .Where(l => l.PREGUNTAID == Convert.ToInt32(Model.PREGUNTAID))
                        .ToList();
                }
                
                var pageIndex = Model.Page ?? 1;
    
               
    
                Model.PreguntarSearch = Preguntas
                                    .OrderByDescending(l => l.LICITACION.LICITACIONID)
                                    .OrderBy(l => l.NUMERALID)
                                    .ThenBy(l => l.MPROVEEDOR.RAZON_SOCIAL)
                                    .ToPagedList(pageIndex, RegistrosPagina);
    
                Model.TotalRegistros = Preguntas.Count();       
    
                return View(Model);
    
            }
    
    
    
            // GET: PREGUNTAS/Details/5
            public ActionResult Details(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
    
                var Pregunta = db.Preguntas.Find(id);            
                if (Pregunta == null)
                {
                    return HttpNotFound();
                }
                //return View(pREGUNTAS);
                return PartialView("Details", Pregunta);
            }
    
            [HttpGet]// GET: PREGUNTAS/Create
            public ActionResult Create()
            {
    
                var RestarDias = DateTime.Now.AddDays(-100);
    
                ViewBag.LICITACIONID = new SelectList(db.Licitacion
                                       //.Where(l => l.FALLO >= RestarDias)
                                       .Where( l => l.ACTIVO)
                                       .OrderBy(l => l.NOLICITACION), "LICITACIONID", "NOLICITACION");
    
                ViewBag.MPROVEEDORID = new SelectList(db.MProveedor
                                       .OrderBy(p => p.RAZON_SOCIAL), "MPROVEEDORID", "RAZON_SOCIAL");
    
                ViewBag.NUMERALID = new SelectList(db.Numerales
                                                    .Where(n => n.LICITACIONID == db.Licitacion.FirstOrDefault().LICITACIONID)
                                                    .OrderBy(n => n.NUMERALID)
                                                    , "NUMERALID", "DESCRIPCIONNUMERAL");
    
                return View();
            }
    
            // POST: PREGUNTAS/Create
            // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
            // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create(PREGUNTAS PreguntaNva)
            {
                var RestarDias = DateTime.Now.AddDays(-100);
    
                if ((ModelState.IsValid) && (PreguntaNva.NUMERALID>0))
                {
                    var PreguntaGuardar = new PREGUNTAS
                    {   
                        FECHAREGISTRO=Utilities.FechaServidor(),
                        USUARIOID = Utilities.ObtenerUsuario(User.Identity.Name),
                        LICITACIONID = PreguntaNva.LICITACIONID,
                        NUMERALID = PreguntaNva.NUMERALID,
                        MPROVEEDORID = PreguntaNva.MPROVEEDORID,
                        NUMPREGUNTA = PreguntaNva.NUMPREGUNTA,
                        PREGUNTA = PreguntaNva.PREGUNTA,
                        TIPOPREGUNTA = PreguntaNva.TIPOPREGUNTA,
                    };
    
                    db.Preguntas.Add(PreguntaGuardar);
                    try
                    {
                        db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        
                        ModelState.AddModelError(string.Empty, ex.Message);
    
                        ViewBag.LICITACIONID = new SelectList(db.Licitacion
                                               .Where(l => l.FALLO >= RestarDias)
                                               .OrderBy(l => l.NOLICITACION), "LICITACIONID", "NOLICITACION");
    
                        ViewBag.MPROVEEDORID = new SelectList(db.MProveedor
                                               .OrderBy(p => p.RAZON_SOCIAL), "MPROVEEDORID", "RAZON_SOCIAL");
    
                        ViewBag.NUMERALID = new SelectList(db.Numerales
                                                            .Where(n => n.LICITACIONID == PreguntaNva.LICITACIONID)
                                                            .OrderBy(n => n.NUMERALID)
                                                            , "NUMERALID", "DESCRIPCIONNUMERAL");
                        ViewBag.Error = "El Campo Numeral es Requerido.";
                        return View(PreguntaNva);
    
                    }
                    return RedirectToAction(string.Format("Create/"));
                    //return RedirectToAction("Index");
                }
                else {
    
                    ViewBag.MPROVEEDORID = new SelectList(db.MProveedor
                                           .OrderBy(p => p.RAZON_SOCIAL), "MPROVEEDORID", "RAZON_SOCIAL");
    
                    ViewBag.LICITACIONID = new SelectList(db.Licitacion
                                          .Where(l => l.FALLO >= RestarDias)
                                          .OrderBy(l => l.NOLICITACION), "LICITACIONID", "NOLICITACION");
    
                    ViewBag.NUMERALID = new SelectList(db.Numerales
                                                        .Where(n => n.LICITACIONID == PreguntaNva.LICITACIONID)
                                                        .OrderBy(n => n.NUMERALID)
                                                        , "NUMERALID", "DESCRIPCIONNUMERAL");
    
                    return View(PreguntaNva);
                }
                         
            }
    
            // GET: PREGUNTAS/Edit/5
            public ActionResult Edit(int? id)
            {
                var RestarDias = DateTime.Now.AddDays(-100);
    
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                var PreguntaEdit = db.Preguntas.Find(id);
                if (PreguntaEdit == null)
                {
                    return HttpNotFound();
                }
    
                ViewBag.MPROVEEDORID = new SelectList(db.MProveedor                                       
                                           .OrderBy(p => p.RAZON_SOCIAL), 
                                           "MPROVEEDORID", "RAZON_SOCIAL",PreguntaEdit.MPROVEEDORID);
    
                ViewBag.LICITACIONID = new SelectList(db.Licitacion
                                      .Where(l => l.FALLO >= RestarDias)
                                      .OrderBy(l => l.NOLICITACION), "LICITACIONID", "NOLICITACION",PreguntaEdit.LICITACIONID);
    
                ViewBag.NUMERALID = new SelectList(db.Numerales
                                                   .Where(n => n.LICITACIONID == PreguntaEdit.LICITACIONID)
                                                    .OrderBy(n => n.NUMERALID)
                                                    , "NUMERALID", "DESCRIPCIONNUMERAL",PreguntaEdit.NUMERALID);
    
                return PartialView("Edit", PreguntaEdit);
            }
    
            // POST: PREGUNTAS/Edit/5
            // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
            // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Edit(PREGUNTAS PreguntaEdit)
            {
                var RestarDias = DateTime.Now.AddDays(-100);
    
                if (ModelState.IsValid)
                {
                    db.Entry(PreguntaEdit).State = EntityState.Modified;
                    try
                    {
                        db.SaveChanges();
                        return Json(new { success = true });
                    }
                    catch (Exception Ex)
                    {
                        ModelState.AddModelError(string.Empty, Ex.Message);
                        return Json(new { success = true });
                       
                    }
                    
                }
    
                ViewBag.MPROVEEDORID = new SelectList(db.MProveedor
                                           .OrderBy(p => p.RAZON_SOCIAL), "MPROVEEDORID", "RAZON_SOCIAL");
    
                ViewBag.LICITACIONID = new SelectList(db.Licitacion
                                      .Where(l => l.FALLO >= RestarDias)
                                      .OrderBy(l => l.NOLICITACION), "LICITACIONID", "NOLICITACION");
    
                ViewBag.NUMERALID = new SelectList(db.Numerales
                                                    .Where(n => n.LICITACIONID == PreguntaEdit.LICITACIONID)
                                                    .OrderBy(n => n.NUMERALID)
                                                    , "NUMERALID", "DESCRIPCIONNUMERAL");
    
                 return PartialView("Edit", PreguntaEdit);
            }
    
            // GET: PREGUNTAS/Delete/5
            public ActionResult Delete(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                var PreguntaEli = db.Preguntas.Find(id);
                if (PreguntaEli == null)
                {
                    return HttpNotFound();
                }
                return View(PreguntaEli);
            }
    
            // POST: PREGUNTAS/Delete/5
            [HttpPost, ActionName("Delete")]
            [ValidateAntiForgeryToken]
            public ActionResult DeleteConfirmed(int id)
            {
                var Preguntas = db.Preguntas.Find(id);
                db.Preguntas.Remove(Preguntas);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            //codigo para obtener unicamente los numerales de la licitacion seleccionada       
            public JsonResult ObtenerNumerales(int LicitacionId)
            {
                db.Configuration.ProxyCreationEnabled = false;
                var numerales = db.Numerales
                                .Where(n => n.LICITACIONID == LicitacionId)
                                .OrderBy(n => n.NUMERALID);
    
                return Json(numerales);
            }
    
            //Cacular Numero de Pregunta Del proveedor y evento seLeccionado
            public JsonResult Calcular_Num_Pregunta(int MProveeedorId, int LicitacionId)
            {
                int? NumPregunta = db.Preguntas
                               .Where(x => x.MPROVEEDORID == MProveeedorId && x.LICITACIONID == LicitacionId)
                               .Select(x => x.NUMPREGUNTA)
                               .DefaultIfEmpty().Max();
    
                if (NumPregunta == null)
                    {
                        NumPregunta = 0;
                    }
                               
                 return Json((int)NumPregunta + 1, JsonRequestBehavior.AllowGet);
            }
    
            /*Obtener Licitaciones que realmente funciona*/
            public JsonResult ListProcedimientos(string Prefix)
            {
                /*var results = (from p in db.Licitacion
                               where (p.NOLICITACION).Contains(Prefix)
                               orderby p.LICITACIONID
                               select p).Take(10).ToList();*/
                var results = from p in db.Licitacion
                             where (p.NOLICITACION).Contains(Prefix)
                             select new {p.NOLICITACION,p.LICITACIONID};
    
                return Json(results, JsonRequestBehavior.AllowGet);
            }
    
            /*Codigo para Capturar las Respuestas de la PRegunta*/
            [HttpGet]
            public ActionResult CapturarPregunta(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                var Pregunta = db.Preguntas.Find(id);
                
                if (Pregunta == null)
                {
                    return HttpNotFound();
                }
                           
                return PartialView(Pregunta);
            }
    
            [HttpPost]
            public JsonResult CapturarPregunta(RESPUESTAS ViewPre, string RESPUESTA)
            {
                var Respuesta = new RESPUESTAS
                {
                    FECHACONTES = Utilities.FechaServidor(),
                    USUARIOID = Utilities.ObtenerUsuario(User.Identity.Name),
                    PREGUNTAID = ViewPre.PREGUNTAID,
                    RESPUESTA = RESPUESTA,
                };
                
    
                if (ModelState.IsValid) 
                {                
                    db.Respuestas.Add(Respuesta);
                    try
                    {
                        db.SaveChanges();
                        return Json(new { success = true });
                    }
                    catch (Exception Ex)
                    {
                        ModelState.AddModelError(string.Empty, Ex.Message + Ex.StackTrace);                    
                    }
                    
                    //return RedirectToAction(string.Format("Details/{0}", view.PREGUNTAID));
                }
    
                return Json(ViewPre, JsonRequestBehavior.AllowGet);
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                base.Dispose(disposing);
            }
        }
    }
    

    Agradeceré su ayuda


    Horacio Xochitemol Bautista

    martes, 9 de agosto de 2016 16:58

Todas las respuestas

  • hola

    >>la relación únicamente me devuelve un registro de lado muchos por ejemplo el id 5280 tiene 3 registro de pregunta y unánimemente me esta regresando el ultimo.

    estas seguro que la consulta filtra correctamente ?

    cuando defines la query de linq no uses el ToList() ya qye estas trayendo la trabla completa a memoria y esot es poco performante

     var Preguntas = db.Preguntas
                                .Include(i => i.NUMERALES)
                                .Include(i => i.PREGUNTASADJUNTOS)
                                .Include(i => i.LICITACION)
                                .Include(i => i.MPROVEEDOR)
                                .Include(i => i.Respuestas);
                

    puedes ir armando la query y al final cuando vayas a usar los datos realiza el toList()

    podrias poner un breakpoint para analizar que valores asigna, es mas sino defines ningun filtro cuando resultados obtienes ?

    >>al presionar el botón  verde que pueda modificar la entidad de respuesta y se vea reflejado el cambio en el index.

    que cambio de index ?


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 9 de agosto de 2016 21:06
  • Hola Leandro de antemano muchas gracias; si pongo la consulta como indicas

    var Preguntas = db.Preguntas
                                .Include(i => i.NUMERALES)
                                .Include(i => i.PREGUNTASADJUNTOS)
                                .Include(i => i.LICITACION)
                                .Include(i => i.MPROVEEDOR)
                                .Include(i => i.Respuestas);
    

    en todos los  TOLIST

    if (Model.LICITACIONID != 0)
                {
                    Preguntas = Preguntas
                        .Where(l => l.LICITACIONID == Model.LICITACIONID) 
                        .ToList();
                }
    
    
                if (Model.PROVEEDORID != 0)
                {
                    Preguntas = Preguntas
                        .Where(l => l.MPROVEEDORID == Model.PROVEEDORID)
                        .ToList();
                }
    
                if (Model.PREGUNTAID != 0)
                {
                    Preguntas = Preguntas
                        .Where(l => l.PREGUNTAID == Convert.ToInt32(Model.PREGUNTAID))
                        .ToList();
                }

    me manda el siguiente error.

    Error 2 No se puede convertir implícitamente el tipo 'System.Collections.Generic.List<SISTEMADBT.Models.PREGUNTAS>' en 'System.Linq.IQueryable<SISTEMADBT.Models.PREGUNTAS>'. Ya existe una conversión explícita (compruebe si le falta una conversión) C:\Users\horacio.xochitemol\Source\Repos\SISTEMADBT\SISTEMADBT\Controllers\PreguntasController.cs 42 21 SISTEMADBT


    Horacio Xochitemol Bautista

    jueves, 11 de agosto de 2016 14:17
  • Amigos sigo sin poder solucionar la problemática de presentación de registro con relación de uno a muchos.

    adjunto esta imagen.

    Puedo visualizar los registro pero con la siguente consulta

    var Preguntas = db.Preguntas
                                .Include(i => i.NUMERALES)
                                .Include(i => i.PREGUNTASADJUNTOS)
                                .Include(i => i.LICITACION)
                                .Include(i => i.MPROVEEDOR)
                                .Include(i => i.Respuestas)                                                        
                                .ToList();

    Ahora como le hago en la View para listar los 3 registro de la tabla respuestas; porque nada mas me muestra uno

    el problema creo que esta en esta linea

    td class="col-md-4" style="text-align:justify">
                        @Html.DisplayFor(modelItem => item.Respuestas.FirstOrDefault().RESPUESTA)                   
                    </td>      
    necesitaria recorrerla para mostrar los 3 registro de respuestas.


    Horacio Xochitemol Bautista

    miércoles, 17 de agosto de 2016 18:15