2010-01-30 25 views
5

que tienen 2 propiedades en mi modelo de vistaASP.NET MVC modelo de vista y DropDownList

class ViewModel1 
{ 
    Dictonary<int, string> PossibleValues {get;set;}//key/value 
    int SelectedKey {get;set} 
} 

quiero editar esta usando un Html.DropDownListFor

quiero conseguir MVC para automóviles serializar los datos en/del modelo de vista para que pueda la siguiente

public ActionResult Edit(ViewModel1 model) ... 

Cuál es la mejor manera de lograr esto?

+0

¿Está utilizando ASP.NET MVC versión 1 o 2? –

+0

Estoy usando la versión 2 – jameszhao00

Respuesta

11

Como womp dicho, un navegador sólo presentará el valor seleccionado de una lista desplegable. Esto se puede vincular fácilmente con el enlace de modelo predeterminado, ver a continuación.

Si no está editando la lista PossibleValues ​​en el cliente, entonces no hay necesidad de volver a enviarlas. Si necesita volver a llenar la lista, hágalo desde el lado del servidor en su acción de publicación utilizando el mismo método con el que originalmente llenó el diccionario.

Por ejemplo, en que la página:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<ViewModel1>" %> 
<!-- some html here --> 
<%= Html.DropDownListFor(x => x.SelectedKey, new SelectList(Model.PossibleValues, "key", "value"))%> 

En su controlador

[AcceptVerbs(HttpVerbs.Get)] 
public ViewResult Edit() { 
var model = new ViewModel1 { 
    PossibleValues = GetDictionary() //populate your Dictionary here 
}; 
return View(model); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ViewResult Edit(ViewModel1 model) { //default model binding 
    model.PossibleValues = GetDictionary(); //repopulate your Dictionary here 
    return View(model); 
} 

Dónde GetDictionary() es un método que devuelve el objeto Dictionary poblada.

See this similar question for more details

0

No creo que pueda construir un diccionario a partir de una lista desplegable en un formulario. Una lista desplegable solo publicará un valor atrás, que podría establecer como su propiedad SelectedKey, pero no podrá reconstruir el diccionario PossibleValues.

Para reconstruir un diccionario, necesitará tener un campo de formulario para cada entrada en él. Se podría hacer algo como esto, generado con un bucle foreach sobre su diccionario:

<input type="hidden" name="PossibleValues[0].Key" value="key0"> 
<input type="hidden" name="PossibleValues[0].Value" value="value0"> 
<input type="hidden" name="PossibleValues[1].Key" value="key1"> 
<input type="hidden" name="PossibleValues[1].Value" value="value1"> 
. 
. 
. 

En última instancia sería cuestionar la necesidad de repoblar el diccionario de la forma. Si solo pueden elegir un valor, ¿por qué los PossibleValues ​​no serían una búsqueda desde algún lugar fuera de su ViewModel (como en su repositorio?) ¿Por qué almacenarlo con ViewModel?

0

La solución se ModelBinding costumbre en el marco ASP.NET MVC He aquí algunos ejemplos ..

stevesmithblog.com/blog/binding-in-asp-net-mvc

www.singingeels.com/ artículos/Model_Binders_in_ASPNET_MVC.aspx

odetocode.com/Blogs/scott/archive/2009/04/27/12788.aspx

odetocode.com/Blogs/scott/archive/2009/05/05/12801. aspx

espero que sean de utilidad ...

Gracias

Cuestiones relacionadas