Parece que no puedo entender cómo establecer una ID única para cada elemento en un SelectList (usando @Html.DropDownListFor). El div en la vista se ve así actualmente:

<div id="Courses">
    @Html.DropDownListFor(c => c.Courses, new SelectList(Model.Courses, "CourseID", "Name"), "Choose Course", new { id = "courseDropDown", @class = "form-control input-sm", data_width = "100%" })
</div>

La inspección del elemento en el navegador muestra que cada elemento tiene el courseID como valor, lo que me gustaría es que cada elemento tenga este ID de curso como un ID único. FYI Model.Courses contiene un enumerable de todos mis cursos.

En aras de la exhaustividad, la razón por la que quiero esto es que tengo un gráfico alto en una vista parcial que corresponde a la lista desplegable, y tengo un botón de la página de mi curso que redirige a la vista con el div parcial y carga el gráfico para un curso determinado (usando la ID de la página del curso). Esto funciona bien, pero ahora necesito dropdownlist para mostrar el nombre de ese curso al cargar la página, mientras que ahora simplemente dice 'Elegir campaña de phishing'

Cualquier ayuda o consejo es apreciada.

Editar: Gracias por ordenar el código Rory

2
bjjrolls 10 may. 2016 a las 11:54

3 respuestas

La mejor respuesta

Si necesita establecer el valor predeterminado de select, debe establecer algún tipo de propiedad CourseId del modelo en su controlador y luego en su Vista:

@Html.DropDownListFor(c => c.CourseId, new SelectList(Model.Courses, "CourseID", "Name"), "Choose Course", new { id = "courseDropDown", @class = "form-control input-sm", data_width = "100%" })

DropDownListFor ayudante establece este valor seleccionado en la carga de la página.

2
teo van kot 10 may. 2016 a las 09:01

Dentro del Modelo o controlador, donde está completando la propiedad del Curso, establece el CourseId como un número único.

¿Realmente importa en la forma en que configura la propiedad?

foreach(var course in DataSource.CourseTitles)
   viewModel.Courses.Add(new Course(){ CourseId = i++, Name = course})
1
Chris Cooper 10 may. 2016 a las 09:07

La respuesta de teo van kot es correcta (+1).

Sin embargo, si no necesita vincular el CourseId para una publicación. puede usar el SelectList constructor: -

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField,
    Object selectedValue
)

Al igual que:-

<div id="Courses">
    @Html.DropDownListFor(c => c.Courses, new SelectList(Model.Courses, "CourseID", "Name", "COURSEID"), "Choose Course", new { id = "courseDropDown", @class = "form-control input-sm", data_width = "100%" })
</div>
1
BenG 10 may. 2016 a las 09:09