/ / ASP.NET MVC3ビューのSelectedListItemで選択条件を変更-条件-asp.net-mvc、asp.net-mvc-3、カミソリ、ドロップダウンメニュー、asp.net-mvc-views

選択項目の変更= ASP.NET MVC3のSelectedListItemでtrue - 条件別に表示 - asp.net-mvc、asp.net-mvc-3、カミソリ、ドロップダウンメニュー、asp.net-mvc-views

これは私のモデルです:

public class MyModel{
public string Name { get; set; }
public string listType { get; set; }
public string SelectedItem { get; set; }
}

私は部分的なビューを持っています:

@model List<MyModel>
@{

SelectListItem iEqualTo = new SelectListItem { Text = "Equel To", Value = "EqualTo" };
SelectListItem iNotEqualTo = new SelectListItem { Text = "Not Equal To", Value = "NotEqualTo" };
SelectListItem iGreaterThan = new SelectListItem { Text = "Greater Than", Value = "GreaterThan" };
SelectListItem iLessThan = new SelectListItem { Text = "Less Than", Value = "LessThan" };
SelectListItem iBetween = new SelectListItem { Text = "Between", Value = "Between" };


List<SelectListItem> MyFirstList = new List<SelectListItem>() {
iEqualTo, iNotEqualTo, iGreaterThan, iLessThan, iBetween
};

List<SelectListItem> MySecondList = new List<SelectListItem>() {
iEqualTo, iNotEqualTo
};

}


@foreach(var item in Model) {

if(item.listType =="Firsttype"){

<span> @Html.DropDownList(item.Name , MyFirstList) </span>

} else {

<span> @Html.DropDownList(item.Name , MySecondList) </span>

}
}

だから私は必要です Selected = trueList<SelectListItem>DropDownList 名前が等しいアイテム MyModel.SelectedItem?あなたの提案は何ですか?実際には私の意見はもっとあります SelectListItem そして List<SelectListItem> そしていくつかの制限のために私は「渡すことができません List<SelectListItem> モデルプロパティとして、ビュー内で処理する必要があります。私はラムダインラインでそれを処理すると思いますが、次のようなことが可能かどうかはわかりません: @Html.DropDownList(item.Name , MySecondList.each(a=> if (a.ToString() == item.SelectedItem) {a.Selected = true})

これを行う方法はありますか?そして、インラインラムダを使用するのが間違っている場合、これを処理する他の方法はありますか?

回答:

回答№1は1

IEnumerableおよびObject(選択された値)を持つコンストラクターを持つSelectListを使用できます。

@Html.DropDownList(item.Name, new SelectList(MyFirstList, item.SelectedItem));

EDIT

ループでDropDownListを使用しようとすると、問題に直面したと思います。

この汎用拡張メソッドを使用することができます(静的な「ヘルパー」クラスで)

public static IEnumerable<SelectListItem> ToSelectListItem<T, TValue, TText, TSelectedValue>(this IEnumerable<T> enumerable,
Func<T, TText> text,
Func<T, TValue> value,
TSelectedValue selectedValue)
{
return enumerable.Select(item => new SelectListItem
{
Text = text(item).ToString(),
Value = value(item).ToString(),
Selected = value(item).Equals(selectedValue)
}).AsEnumerable();
}

その後

@Html.DropDownList(item.Name, MyFirstList.ToSelectListItem(m => m.Text, m => m.Value, item.SelectedItem)