瞬時にDropDownListFor
、optionLabel
引数でのオーバーロードを使用します (「タスクの選択」引数.
アイテムが選択されていない場合、これは「選択されたオプション」と見なされ、 に対して null 値が返されますmodel.projecttaskid
。
0
最も簡単な方法は、リストを作成するときに値を持つ要素を追加することです ( ViewData["MyTasks"]
)
たとえば、次のようにします。
Value = 0;
Text = "Select Task;
そして、optionLabel なしで DropDownListFor のオーバーロードを使用します。
[ちなみに、ViewData の代わりに ViewModels を使用するのは良いことですが、それは別の問題です]
*編集*
これらのケースを管理するために、いくつかの拡張メソッドを使用します。
public static IEnumerable<SelectListItem> ToSelectListItem<T, TValue, TText>(
this IEnumerable<T> enumerable,
Func<T, TText> text,
Func<T, TValue> value)
{
return enumerable.Select(item => new SelectListItem
{
Text = text(item).ToString(),
Value = value(item).ToString()
}).AsEnumerable();
}
public static IEnumerable<SelectListItem> WithDefaultZeroValue(this IEnumerable<SelectListItem> selectListItems, string chooseText/* = ChooseText*/)
{
IList<SelectListItem> items = selectListItems.ToList();
items.Insert(0, new SelectListItem { Value = "0", Text = chooseText });
return items.AsEnumerable();
}
利用方法
var myList = mySourceForDropDown.ToSelectListItem(m => m.TextField, m => m.ValueField)
.WithDefaultZeroValue("SelectTask")