Причина, по которой выбранное вами значение не работает, заключается в том, что вы используете URL-адреса в качестве значений параметров, но задаете Model.ID
в предложении Selected
.
Попробуйте вот так:
<%= Html.DropDownListFor(
model => model.Bikes,
new SelectList(Model.Bikes, "Id", "Name", Model.ID)
)%>
"Id"
указывает свойство, которое будет использоваться в качестве значения параметра, а "Name"
указывает свойство, которое будет использоваться в качестве метки параметра.
Если вы хотите сохранить Url.Action
, вы можетеtry:
<%= Html.DropDownListFor(
model => model.Bikes,
new SelectList(Model.Bikes.Select(x => new {
Id = x.Id,
Name = Url.Action("Details", "Bike", new { bikeId = x.ID })
}), "Id", "Name", Model.ID)
)%>
Вы заметите, что я инвертировал Name и Id, так как было более логично использовать Id модели в качестве значения опции.
ОБНОВЛЕНИЕ:
Причина, по которой это не работает, заключается в том, что вы привязываетесь к IEnumerable
(первый аргумент помощника DropDownListFor
).Это должно быть скалярное свойство, когда вы используете одну и ту же коллекцию model.Bikes
:
<%= Html.DropDownListFor(
model => model.SelectedBikeValue,
Model.Bikes.Select(
x => new SelectListItem {
Text = x.Name,
Value = Url.Action("Details", "Bike", new { bikeId = x.ID }),
Selected = x.ID == Model.ID,
}
)) %>
Мое замечание о том, что не следует использовать URL-адреса в качестве значений параметров, соответствует действительности.