Establecer el valor de DropDownListFor basado en una base de datos en MVC

asp.net-mvc c# dapper

Pregunta

Ya hay varias preguntas sobre esto en SO y he revisado algunas de ellas, pero todavía no puedo entender exactamente qué estoy haciendo mal aquí. Puedo tener una lista desplegable para rellenar los valores de selección sin ningún problema, pero establecer el valor de la lista desde la base de datos no funciona.

Básicamente, la misma lista de selección se usa varias veces en la página, y hay una variable de modelo separada que rastrea el valor de cada instancia. Aquí hay un ejemplo de la variable hdr_base_uom:

El modelo:

public string hdr_base_uom { get; set; }
public List<UomOption> putupOptions { get; set; }

public class UomOption
{
    public int uom_id { get; set; }
    public string uom_description { get; set; }
}

Poblando la lista:

public List<UomOption> GetPutupOptions()
{
    try
    {
        using (IfxConnection con = new IfxConnection(WebConfigurationManager.AppSettings["IBMCONN"].ToString()))
            {
                con.Open();
                List<UomOption> uomOptions= con.Query<UomOption>("select uom_id, initcap(uom_description) as uom_description " +
                    " from oe_unitom " +
                    " where uom_group = 1 order by uom_description").ToList();
                con.Close();
                uomOptions.Insert(0, new UomOption(){ uom_id = 0, uom_description = " "});
                return uomOptions;
            }
        }
        catch (Exception x)
        {
            throw x;
        }
    }

La vista:

@Html.DropDownListFor(model => model.hdr_base_uom, new SelectList(Model.putupOptions, 
    "uom_id", "uom_description", Model.hdr_base_uom), 
    new { disabled = "disabled", style = "width:13em" })

Si simplemente visualizo el valor de model.hdr_base_uom en la página, uom_id el uom_id que está configurado para esa variable. Sin embargo, intentar usar esa ID para establecer el valor de la dropdownlistfor no hace nada. Por ejemplo, si el uom_id es 58 que tiene la descripción correspondiente de "Roll" para mostrar, en lugar de uom_id la uom_id la dropdownlistfor lugar muestra el primer elemento de la lista (el elemento vacío agregado arriba).

¿Alguna idea sobre lo que estoy haciendo mal aquí?

Respuesta popular

No estoy seguro de qué significa Model.hdr_base-uom . No lo necesita, sin embargo:

@Html.DropDownListFor(model => model.hdr_base_uom, new SelectList(Model.putupOptions, 
    "uom_id", "uom_description"), 
    new { disabled = "disabled", style = "width:13em" })

También asegúrese de configurar "58" (o lo que sea que el valor seleccionado debe ser, stringified) al campo hdr_base_uom .

Tu ejemplo funciona para mí como está (con o sin Model.hdr_base-uom ) (en los navegadores modernos, por supuesto).

Violín



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué