Правильно, поэтому мое последнее предложение в основном верно - свойство Selected объекта SelectListItem в этом сценарии не имеет смысла. Приветствия.
олностью озадачило меня.
Вот мой взгляд:
@Html.DropDownListFor(model => model.ScoreDescription,
Model.RatingOptions,
"--",
new { @id = clientId })
И модель:
public decimal? Score { get; set; }
public SelectList RatingOptions
{
get
{
var options = new List<SelectListItem>();
for (var i = 1; i <= 5; i++)
{
options.Add(new SelectListItem
{
Selected = Score.HasValue && Score.Value == Convert.ToDecimal(i),
Text = ((decimal)i).ToRatingDescription(ScoreFactorType),
Value = i.ToString()
});
}
var selectList = new SelectList(options, "Value", "Text");
// At this point, "options" has an item with "Selected" to true.
// Also, the underlying "MultiSelectList" also has it.
// Yet selectList.SelectedValue is null. WTF?
return selectList;
}
}
Как показывают комментарии, я не могу получить выбранное значение.
Это как-то связано с тем, что я использую обнуляемыйdecimal
? После этого циклаoptions
Правильно в том, что у него ровно 1 элемент с select to true, поэтому, похоже, я делаю правильные вещи.
Теперь, если я используюразные SelectList
перегрузка:
var selectedValue = Score.HasValue ? Score.Value.ToString("0") : string.Empty;
var selectList = new SelectList(options, "Value", "Text", selectedValue);
Оно работает. Почему? Сначала я подумал, что это может быть трюк LINQ (например, отложенное выполнение), но я попытался заставить.ToList()
и нет никакой разницы.
Это как установкаSelected
свойство при созданииSelectListItem
не имеет никакого эффекта, и вы должны установить его в конце, используяSelectList
параметр ctor.
Может кто-нибудь пролить некоторый свет на это?