En mi opinión,

<%= Html.DropDownListFor( x => x.Countries[ i ], Model.CountryList )%>

en mi controlador

public int[ ] Countries { get; set; }

public List<SelectListItem> CountryList { get; set; }

Cuando las formas se publique no hay ningún problema, la lista se rellena y los valores que el usuario selecciona están publicados. Pero cuando intento cargar el formulario con los valores asignados a los Países[ ] no seleccionado.

InformationsquelleAutor Eyeslandic | 2010-04-13

6 Comentarios

  1. 10

    Estoy recibiendo el mismo también. Cuando se utiliza el método foreach para recorrer alrededor de un DropDownListFor (es decir, para procesar varios seleccionar elementos de una página).

    Mi trabajo es establecer el valor seleccionado en el controlador en lugar de la vista: algo como esto:

    En el controlador:

    public class FruitList 
    {        
        public int? selectedFruit{ get; set; }
        public List<SelectListItem> fruits
        {
            get
            {
                fruitEntities F = new fruitEntities();
                List<SelectListItem> list = (from o in F.Options
                                             select new SelectListItem
                                             {
                                                 Value = o.fruitID,
                                                 Text = o.fruit,                                                 
                                                 Selected = o.fruitID == selectedFruit
                                             }).ToList();
                return list;
            }
        }
    }
    
    public class ViewModel 
    {              
        public List<FruitList> collectionOfFruitLists { get; set; }        
    }

    En la vista

    <table>                        
       <% for (int i=0; i < Model.collectionOfFruitLists.Count; i++ )
            { %>
            <tr>                            
                <td><%: Html.DropDownList("fruitSelectList", collectionOfFruitLists[i].fruits, "Please select...") %></td>                
            </tr>
            <%} %>
     </table>

    El ingenioso bits es Selected = o.fruitID == selectedFruit en el controlador que actúa como un SQL CASO de declaración; esto está muy bien explicado por Lance Fisher (gracias a Lance, tu post realmente me ayudó a salir 🙂

    • Usted no necesita la ? true : false poco, justo Selected = o.fruitID == selectedFruit va a hacer.
    • Mr B – buena solución el hombre. Tengo un StackOverflow de error cuando ejecuto el código, pero la idea es que el sonido tiene que crear el SelectList para cada lista desplegable y establecer explícitamente el SelectedItem en el Controlador. Buen trabajo. Esto me estaba volviendo loco!
    • Solo quiero decir que a partir de hoy (2016ish) con MVC5, esto es todavía un problema… Este es uno de esos «¿Pero por qué??» que se pierden en el universo, cuando, lógicamente, se podría pensar que debería funcionar, pero no por ninguna razón aparente. Usted pensaría que Microsoft iba a decir un «Por cierto», pero no tanto.. Gracias stackoverflow!! Voy a tratar de resolver a mí mismo para hacerlo de esta manera… ughhh
  2. 24

    No estoy seguro si esto es nuevo para mv4 o si existe en la versión anterior. Pero el DropDownListFor incluye un parámetro adicional para el SelectList Constructor.

    SelectList(IEnumerable, String, String, Object)

    Por ejemplo:

    Html.DropDownListFor( x => x.Countries[ i ], New SelectList(Model.CountryList,"ID","Description",Model.Countries[i]))

    Donde ID es el ID del País en el CountryList objeto y Description es el Nombre del País.

    • +1 para llegar a trabajar para mí. Yo todavía no desea volver a crear mi SelectList para cada elemento de mi bucle, así que voy a seguir buscando.
    • Gracias! Funcionó bien para mí, para mostrar un menú desplegable (Id de Ubicación) en cada fila de una tabla. @Html.DropDownListFor(x=>x.OrderLineItems[i].OrderMfgLocationId, new SelectList(Model.MfgLocations, "Value", "Text", Model.OrderLineItems[i].OrderMfgLocationId))
    • no seleccione el elemento coincidente en la lista – que agrega un nuevo elemento a la parte superior de la lista. utilizable, pero no ideal.
  3. 6

    Sé que esta pregunta es un poco viejo pero me encontré con este problema con un bucle a través de una lista de objetos y tratando de enlazar los valores a DropDownListFor(s) en la Vista de Edición.

    Superé el problema con una solución en línea por medio de la lógica de algunas de las anteriores soluciones dadas por otras personas para esta pregunta.

    Vinculante para mi Modelo:

    @Html.DropDownListFor(model => model.QuestionActions[i].QuestionActionTypeId,
          Model.QuestionActionTypes.Select(x => new SelectListItem() { Value = x.Value, Text = x.Text, Selected = (x.Value == Model.QuestionActions[i].QuestionActionTypeId.ToString()) }).ToList(),
              "Select Action Type",
                     new { })

    Modelo.QuestionActionTypes es un SelectList que se rellena en mi Controlador.

  4. 0

    Esto es un poco de un hack, y JavaScript reliant pero funcionó muy bien para mí.

    Usted necesitará saber el Id de cliente que será producido por los campos, por lo general, estos se pueden resolver de forma manual, pero para la seguridad de usted lo desea, puede usar algo como un FieldIDFor método.

    Usted sólo debe fijar los valores basados en el modelo, en jQuery $(document).listo:

    <script type="text/javascript">
        $(document).ready(function () {
            @for(var i = 0; i < 5; i++)
            {
                <text>
                    $("#@Html.FieldIDFor(m => m.Countries[i])").val("@Model.Countries[i]");
                </text>
            }
        });
    </script>
  5. -1

    Un cuadro de selección envía a un único valor, por lo que el Countries de la propiedad no debe ser una matriz. También en tu post no está claro dónde está el i variable que está utilizando en su expresión lambda y en este x.CountryList utilizado en el ayudante no se compile como x no está definido.

    Modelo:

    public class MyModel
    {
        public int SelectedCountry { get; set; }
        public List<SelectListItem> CountryList { get; set; }
    }

    Vista:

    <%= Html.DropDownListFor(x => x.SelectedCountry, Model.CountryList) %>

    ACTUALIZACIÓN:

    De acuerdo con el comentario parece que hay varias listas desplegables. Sospecho que el problema podría venir de la i variable que se utiliza como índice en una for bucle.

    Usted puede probar esto:

    Modelo:

    public class MyModel
    {
        public int[] Countries { get; set; }
        public List<SelectListItem> CountryList { get; set; }
    }

    Vista:

    <% foreach (var country in Model.Countries) { %>
        <%= Html.DropDownListFor(x => country, Model.CountryList) %>
    <% } %>
    • La x.CountryList fue sólo un error tipográfico en la pregunta anterior. El «yo» surge de una simple bucle for. Tengo varias dropdownlists, y x.Países[i] contiene el valor del elemento seleccionado.
    • Por favor ver mis actualizaciones.
    • El «yo» no es el problema creo yo, porque cuando voy a cargar el formulario los valores de las listas desplegables se registran correctamente en los Países[] propiedad.
    • «yo» es necesaria para aquellos de nosotros que son la publicación de los resultados, y la necesidad de que la colección se unen en el servidor.
  6. -1

    Lugar de utilizar un IEnumerable en su viewmodel el uso de una Lista de objetos como este:

    public List<PairVM<string,string>> TiposValorCobertura { get; private set; }

    Y en su vista al asignar los modos de selección de elementos para el dropdownlist en el bucle, hacerlo de esta manera:

    @Html.DropDownListFor(m => m.Coberturas[i].TipoLimiteInferior, new SelectList(Model.TiposValorCobertura,"Key","Description",  Model.Coberturas[i].TipoLimiteIferior))

    Donde «Clave» y «Descripción» se PairVM propiedades del

Dejar respuesta

Please enter your comment!
Please enter your name here