4 Pregunta: ASP.NET MVC 4 ViewModel con datos DropDownList

pregunta creada en Sat, Feb 2, 2013 12:00 AM

Estoy usando @html.EditorFor para renderizar mi modelo en modo de edición, y no se renderiza una lista desplegable.

Aquí está mi ViewModel:

 
     public class RiskAutoViewModel
     {
       public RiskAutoViewModel()
       {
         VehicleMakeList = new SelectList(new List<VehicleMake>() { new VehicleMake() { Id = 1, Name = "Renault" }, new VehicleMake() { Id = 2, Name = "Peugeot" } });
       }


    public int NoClaimsDegree { get; set; }

    public int VehicleValue { get; set; }

    public int EngineCapacity { get; set; }

    public int VehicleMake { get; set; }

    public SelectList VehicleMakeList { get; set; }
  }

VehicleMake se representa como un cuadro de texto y VehicleMakeList no se representa en absoluto. Lo que me gustaría es hacer una lista desplegable que contenga la lista de VehicleMake y establecer su valor en el de VehicleMake.

Cuando se guarda el modelo, VehicleMake debe establecerse en el valor del elemento seleccionado en la lista.

¿Cómo puedo hacer eso?

EDIT

Ya que no puedo escribir ningún código en los cuadros de comentarios a continuación, escribiré un seguimiento aquí.

Terminé creando una plantilla de editor como:

 
<div class="editor-label">
    @Html.LabelFor(model => model.VehicleMakeList)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
    @Html.ValidationMessageFor(model => model.VehicleMake)
</div>

Y ahora mi ViewModel se ve así:

 
[Required]
[ScaffoldColumn(false)]
public int VehicleMake { get; set; }

[Display(Name = "Marque", Prompt = "Marque", Description = "Renseigne la marque du véhicule")]
public SelectList VehicleMakeList { get; set; }

Ahora, esto me lleva a otra pregunta (quizás debería hacerlo como en un tema diferente) pero en realidad tengo DOS menús desplegables en esa Vista. Y los elementos del segundo menú desplegable son básicamente dinámicos y dependen del elemento seleccionado en el primer menú desplegable. Esto es muy fácil de hacer con AJAX pero con MVC estoy perdido. ¿Cómo hace la gente eso normalmente?

    
9
  1. Y solo un aviso para usted, si decide seguir el @Html.EditorFor() con un @Html.DropDownlistFor, tendrá problemas al vincular la propiedad VehicleMake con la selección desplegable , ya que su valor estará determinado por el cuadro de texto rediseñado por el EditorFor()
    2013-02-01 21: 34: 31Z
  2. editó mi respuesta con la solución más simple
    2013-02-01 21: 38: 37Z
4 Respuestas                              4                         

Lamentablemente, no hay soporte integrado para listas desplegables en el editor de plantillas. Puede escribir su propia plantilla de editor o utilizar el método de ayuda html @Html.DropDownListFor() en su opinión.

La respuesta de Darin Dimitrov a esta pregunta ​​a > puede guiarlo a través del proceso de creación de una plantilla de editor para listas desplegables, si así lo desea.

La forma más rápida de hacer que esto funcione sería hacerlo en su opinión:

 
@Html.EditorFor(model => model.NoClaimsDegree)
@Html.EditorFor( model => model.VehicleValue )
@Html.EditorFor( model => model.EngineCapacity )
@Html.DropDownListFor( model => model.VehicleMake, Model.VehicleMakeList, "Select a make" )
    
10
2017-05-23 11: 55: 07Z
  1. Terminé haciendo algo similar en EditorTemplate (¿por qué no puedo escribir código en este cuadro de comentarios, es molesto ...) < div class = "editor- etiqueta "> @ Html.LabelFor (model = > model.VehicleMakeList) < /div > < div class = "editor-field" > @ Html.DropDownListFor (model = > model.VehicleMake, Model.VehicleMakeList) @ Html.ValidationMessageFor (model = > model.VehicleMake) < /div >
    2013-02-01 22: 06: 06Z

Creo que el modelo para la lista desplegable debería ser:

 
public List<System.Web.Mvc.SelectListItem> VehicleMakeList {get; set;}

Y se inicializó como:

 
VehicleMakeList = new List<System.Web.Mvc.SelectListItem>() 
{ 
   new SelectListItem { Value = "1", Text = "Renault" }, 
   new SelectListItem { Value = "2", Text = "Peugeot" } 
};

O usando una fuente de datos:

 
    VehicleMakeList = db.VehicleMakers /*EF, LINQ2SQL, ADO.NET or any supported external source*/
       .Select(v=> new SelectListItem { Text = v.Name, Value = v.Id})
       .ToList();

Ver:

 
@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
    
8
2017-01-26 15: 59: 54Z
  1. ¿qué tiene de malo usar una Lista de selección?
    2013-02-01 22: 11: 17Z
  2. nada mal. Las preguntas de los principiantes ejecutan el gambito.
    2013-02-01 22: 35: 30Z
  3. ¿significa eso que tengo que codificar los valores para seleccionarlistitem?
    2017-01-26 04: 29: 26Z
  4. No, puede completar los valores desde cualquier fuente. Eso es solo por brevedad.
    2017-01-26 15: 52: 57Z

La lista desplegable de enlaces es muy difícil en MVC puede hacerlo con este controlador en su lista de ciudades, póngala en viewBag

Crear

 
      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");

user.CityID si está en Editar para que al editarlo seleccione la ciudad

 
      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);

en tu vista solo haz este truco

 
     @Html.DropDownList("CityId", "Select")

esta es la forma más sencilla que conozco ...

    
3
2013-03-20 11: 54: 23Z
  1. Por lo general, viewbag no es un método de almacenamiento recomendado, especialmente para los datos de model . Estos deben encapsularse desde el modelo en el viewmodel .
    2018-02-18 05: 05: 57Z
  2. El punto de mi comentario, es incómodo separar los menús desplegables de la presentación del "modelo", esto no produce un buen resultado a largo plazo. Haga un ViewModel y encapsule las listas, luego visualice las actualizaciones parciales de los cambios a las reglas "paso a paso". Use las mismas reglas en "Partials" para luego refinar las otras selecciones que tiene en el parcial. stackoverflow .com /questions /9517627 /…
    2018-02-18 05: 15: 12Z

lista desplegable de enlace es fácil. código de la siguiente manera

 
public ActionResult BindWithModel()
{
    List<SelectListItem> items = new List<SelectListItem>();

    items.Add(new SelectListItem 
                { Text = "Select Category", Value = "0", 
                        Selected = true });
    items.Add(new SelectListItem
                { Text = "Beverages", Value = "1" });
    items.Add(new SelectListItem
                { Text = "Condiments", Value = "2" });
    items.Add(new SelectListItem
                { Text = "Confections", Value = "3" });
    items.Add(new SelectListItem
                { Text = "Dairy Products", Value = "4" });
    items.Add(new SelectListItem
                { Text = "Grains/Cereals", Value = "5" });
    items.Add(new SelectListItem
                { Text = "Meat/Poultry", Value = "6" });
    items.Add(new SelectListItem
                { Text = "Produce", Value = "7" });
    items.Add(new SelectListItem
                { Text = "Seafood", Value = "8" });

    var model = new CategoryModel()
    {
        lstCategory = items,
        selected = 1
    };

    return View(model);
}

Código a la vista

 
@model BindMvcDropdownList.Models.CategoryModel

<h1>Bind MVC DropDownList with Model</h1>

@Html.DropDownListFor(x => x.selected, Model.lstCategory)

código tomado de aquí http: //dotnetmentors.com/mvc/how-to-bind-dropdownlist-in-asp-net-mvc-application.aspx

    
0
2016-03-24 09: 57: 49Z
fuente colocada aquí