none
Introducirle opciones manuales a @Html.DropdownListFor RRS feed

  • Pregunta

  • Estoy cargando un @Html.DropdownListFor creando un SelectList con datos procedentes de la Base de datos, pero necesito que aparezcan opciones que no están en la base de datos tales como "Elija un opción" o "Todos" esto en ASP .NET se podía hacer al poner la propiedad AppendDataboundItems en true, ¿ pero como se hace lo mismo en MVC 4 ?

    un saludo

     

       

    jueves, 14 de noviembre de 2013 20:44

Todas las respuestas

  • hola

    podrias desde el codigo del controlador asignar los valores extra, o sea definir

    public class XXModel{

        public int Prop {get; set;}

        public SelectList Datos {get; set;}

    }

    en el controlador

    public class ControladorXX{

        public ActionResult ActionXX(){

              XXModel model = new XXmodel()

              var datos = repository.GetAll();

              datos.Insert(0, new entidad() { prop1= "Elija un opción" });

              datos.Insert(0, new entidad() { prop1= "todos" });

              model.Datos = SelectList(datos, ....);

             return View(model);

        }

    }

    por supuesto la view deberia implementar este modelo y usar

    @Html.DropdownListFor(x=> x.Prop, Model.Datos...)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    jueves, 14 de noviembre de 2013 21:46
  • Hola.
    Puedes hacerlo fácilmente con esta extensión del DropDownListFor

    http://msdn.microsoft.com/en-us/library/ee703561(v=vs.108).aspx

    Sería algo como esto

    @Html.DropDownListFor(m => m.FieldId, new SelectList(Model.Collection, "Id", "DisplayName"), "TEXTO A MOSTRAR")
    


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS), Developing ASP.NET MVC 4 Web Applications
    Twitter | @saintwukong

    viernes, 15 de noviembre de 2013 2:02
  • No funciona porque mi repositorio de datos es un DBSet<> de Code-First (Entidades) y no admite el método Insert(), admite el método Add(), pero aunque lo utilices y le añadas la opción de "Todo" antes de crear el SelectList, no lo admite y el contenido antes y después de añadirle el valor manualmente es el mismo, es como si lo rechazara, para evitarlo estaba antes la propiedad AppendDataBoundItem pero ahora ya no sé como.
    sábado, 16 de noviembre de 2013 12:03
  • Muy bueno, si efectivamente esto soluciona el texto que aparece inicialmente, es la mitad del problema, gracias por el aporte, pero aún queda la parte de como añadirle la opción "Todo" que por supuesto no va a estar en la Base de datos.

    un saludo

    sábado, 16 de noviembre de 2013 12:06
  • No funciona porque mi repositorio de datos es un DBSet<> de Code-First (Entidades) y no admite el método Insert(), admite el método Add(), pero aunque lo utilices y le añadas la opción de "Todo"

    pero estas opciones se las agregas luego de desconectar la entidad del contexto, no se como usas Code-First

    pero si a la query linq le agregas un ToList() esto hara que ya no este en el contexto por lo que puedes usar el Insert()

    tienes que dejar de usar el IQueryable<> tienes que tener uan lista desconectada

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 16 de noviembre de 2013 13:57
  • La opción inicial la puedes tratar como la opción todo, es decir... si el usuario no ha seleccionado ningún elemento sino lo ha dejado en "Todo", el valor será nulo y eso te permitirá indicar que en ese caso debes obtener todos los elementos.

    De hecho, esta explicación que te doy sería la que dictan las Good Practices ;)


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS), Developing ASP.NET MVC 4 Web Applications
    Twitter | @saintwukong

    lunes, 18 de noviembre de 2013 14:19
  • No funciona porque si le añades una opción al DropdownList en su creación añadiendo un cadena detrás del SelectList, dicha opción aparece pero el ValidationSummary no la toma como una respuesta valida y so valida el formulario.

    viernes, 10 de enero de 2014 15:54