2012-01-02 8 views
5

Quiero crear una DropDownList con un enlace para uno de los datos de mi modelo, pero quiero que los elementos desplegables se construyan dentro de la Vista y no deseo que los elementos entren en los datos del Modelo o desde mi controlador. ¿Puede usted por favor, sugiera cómo construir el selectlist a la vista Básicamente quiero crear algo como esto:Creando DropDownListPara elementos en la vista

<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %> 

Para sugerir.

-Sampat.

+0

¿Por qué no quieres que los artículos provengan de la vista? La vista solo debe presentar datos. ¿Por qué no puedes usar un modelo de vista? Tengo una muestra desplegable en http://code.msdn.microsoft.com/Using-the-DropDownList-67f9367d – RickAndMSFT

Respuesta

6

No puede usarlo de esa manera. Como su nombre indica es para devolver un elemento de selección de HTML para cada propiedad en el objeto que se representa mediante la expresión especificada utilizando los elementos de lista especificados y los atributos de HTML.

Aunque puede crear este objeto de lista a la vista como siguiente: -

@Html.DropDownListFor(model => model.DropDownElement, 
         new SelectList(model.DropDownElement, "Id", "Name")) 

actualización

voy a tomar el ejemplo de un modelo de país con un par nombre/ID. Como siguiente

public class Country 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Ahora, en su acción del controlador, puede pasar como un selectlist:

public ActionResult YourAction() 
{ 
    YourModel yourModel = new YourModel(); // Just for reference. I suppose you must be passing some model to your view 
    ViewBag.DropDownList = new SelectList(db.Countries, "Id", "Name"); // This way you don't need to make any changes with your passing model. 
    return View(yourModel); 
} 

Y finalmente a la vista, se puede utilizar el DropDownListFor de la siguiente manera.

@Html.DropDownListFor(model => model.YourModelProperty, 
    (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---") 

En una nota, si lo que desea es visualizar una lista de números con valor, se puede introducir directamente el código HTML y utilizarlo, en lugar de utilizar el DropDownListFor. Al igual que follwing

<select id="yourModelPropertyName" name="yourModelPropertyName"> 
    <option value="">---Select Value---</option> 
    <option value="1">India</option> 
    <option value="2">Australia</option> 
    <option value="3">US</option> 
    <option value="4">England</option> 
    <option value="5">Finland</option> 
</select> 

Sólo asegúrese de que "yourModelPropertyName" es correcta y que debería ser el de la propiedad en la que desea que actualiza

más Actualizar

En los puntos de vista en el que wan 't para mostrar el valor seleccionado, utilice el código de abajo

<select id="yourModelPropertyName" name="yourModelPropertyName"> 
    <option selected="selected" value="1">@model.YourDropDownList</option> 
    <option value="2">India</option> 
    <option value="3">Australia</option> 
</select> 

Esto hará el truco :-)

+0

La propiedad que se actualizará es solo un entero que se actualiza según el elemento seleccionado en el menú desplegable, en su ejemplo "DropDownElement" es mi valor int en DB, ahora necesito que se muestre una lista en el menú desplegable que es un par de nombre/valor estático y enlazar el valor seleccionado a la propiedad mientras se envía el modelo. – Sampat

+0

He editado mi respuesta con un ejemplo más ilustrado. Espero que ayude –

+0

BTW El código de la vista es de sintaxis Razor. Deberá eliminar "@" y colocar "<%" al inicio y "%>" al final. –

1

@Pankaj te dio una forma aproximada de hacerlo. También puede pasar el objeto IEnumerable del objeto SelectListItem a su vista desde el controlador y crear su elemento de selección en función de eso.

Aquí es un buen ejemplo:

A Way of Working with Html Select Element (AKA DropDownList) In ASP.NET MVC

Imagínese que el controlador se parece a algo como esto:

public ActionResult Index() { 

    var products = productRepo.GetAll(); 

    registerProductCategorySelectListViewBag(); 
    return View(products); 
} 

private void registerProductCategorySelectListViewBag() { 

    ViewBag.ProductCategorySelectList = 
     productCategoryRepo.GetAll().Select(
      c => new SelectListItem { 
       Text = c.CategoryName, 
       Value = c.CategoryId.ToString() 
      } 
     ); 
} 

en su opinión, DropDownListFor html ayudante debe parecerse a algo como esto:

@Html.DropDownListFor(m => m.CategoryId, 
    (IEnumerable<SelectListItem>)ViewBag.ProductCategorySelectList 
) 
0

Sa mpat, cuando deje esta respuesta con respecto a su pregunta, estoy más que seguro de que ha terminado con su aplicación y su solución está en funcionamiento.

Pero me gustaría dejar esta respuesta para aquellos que todavía buscan un enfoque limpio, simple y rápido.
Así que aquí estamos, necesitamos completar una DropDownList con algunos elementos.
Para este enfoque voy a usar @Html.DropDownList en mi vista, y para pasarle los datos necesarios, voy a usar el mágico ViewBag en mi controlador.

Aquí está mi controlador contienen los datos que necesito para llenar mi DropDownList con:

public ActionResult Index() 
     { 
      List<SelectListItem> items = new List<SelectListItem>(); 
      items.Add(new SelectListItem 
      { 
       Text = "Option 1", 
       Value = "1" 
      }); 
      items.Add(new SelectListItem 
      { 
       Text = "Option 2", 
       Value = "2" 
      }); 
      ViewBag.DDLItems = items; 
      return View(); 
     } 

Como se puede ver, he hecho un objeto de lista, y después se añaden dos elementos en ella. Por último, me más allá de todos los artículos en mi ViewBag cual lo llamé DDLItems
Ahora vamos a ver cómo enlazar los elementos para @html.DropDownList en nuestra opinión

@Html.DropDownList("DropDownListID", new SelectList(ViewBag.DDLItems, "Value", "Text"), "--- Please Choose an Item! ---") 

Como se puede ver este enfoque es fácil, fiable, rápido y limpio

Espero que ayude.

Cuestiones relacionadas