填充列表的有效方法-ASP.NET MVC3
本文关键字:-ASP NET MVC3 方法 有效 列表 填充 | 更新日期: 2023-09-27 18:20:02
我是ASP.NET MVC 3的新手,来自RoR,所以我对MVC设计模式有些熟悉。
我创建了一个方法,该方法生成一个要在dropdownfor()中使用的选择列表。
我下面的方法很有效,但我想知道我是否可以让它更高效,或者至少用更少的代码做同样的事情?
感谢
public static IEnumerable<SelectListItem> GetDistanceUnits(string distanceUnit)
{
DistanceUnit MilesUnit = new DistanceUnit();
MilesUnit.OptionValue = "mi";
MilesUnit.OptionName = "Miles";
MilesUnit.OptionSelected = "";
DistanceUnit KilometersUnit = new DistanceUnit();
KilometersUnit.OptionValue = "km";
KilometersUnit.OptionName = "Kilometers";
KilometersUnit.OptionSelected = "";
var distanceUnitList = new List<SelectListItem>();
distanceUnitList.Add(new SelectListItem
{
Value = MilesUnit.OptionValue,
Text = MilesUnit.OptionName,
Selected = MilesUnit.OptionSelected == distanceUnit
});
distanceUnitList.Add(new SelectListItem
{
Value = KilometersUnit.OptionValue,
Text = KilometersUnit.OptionName,
Selected = KilometersUnit.OptionSelected == distanceUnit
});
return distanceUnitList.OrderByAscending(c => c.Text);
}
您可以使用生成器创建列表,并使用一个小Linq
来投影列表。
public static IEnumerable<SelectListItem> GetDistanceUnits(string distanceUnit)
{
var distanceUnitList = GetUnits()
.Select(u =>
new SelectListItem
{
Value = u.OptionValue,
Text = u.OptionName,
Selected = u.OptionSelected == distanceUnit
})
.OrderByAscending(c => c.Text)
.ToList();
return distanceUnitList;
}
private static IEnumerable<DistanceUnit> GetUnits()
{
yield return new DistanceUnit
{
OptionValue = "mi";
OptionName = "Miles";
OptionSelected = "";
};
yield return new DistanceUnit
{
OptionValue = "km";
OptionName = "Kilometers";
OptionSelected = "";
};
}
您可以使用如下列表初始值设定项来进一步压缩代码:
var distanceUnitList = new List<SelectListItem> {
new SelectListItem {
Value = MilesUnit.OptionValue,
Text = MilesUnit.OptionName,
Selected = MilesUnit.OptionSelected == distanceUnit
},
new SelectListItem {
Value = KilometersUnit.OptionValue,
Text = KilometersUnit.OptionName,
Selected = KilometersUnit.OptionSelected == distanceUnit
}
};
否则,我会说这是一个非常紧凑的方法,组织良好,并且在MVC应用程序的其他领域中可以非常重用。
你可以用更少的代码来实现它,但我不确定它会有多高效:
var distanceUnitList = new List<SelectListItem>
{
new SelectListItem{...},
new SelectListItem{...},
};
如果只使用这些局部变量一次(向SelectListItem提供数据),则不需要它们。您可以执行以下操作:
var distanceUnitList = new List<SelectListItem>() {
new SelectListItem
{
Value = "mi",
Text = "Miles",
Selected = ("" == distanceUnit) // odd code...
},
new SelectListItem
{
Value = "km",
Text = "Kilometers",
Selected = ("" == distanceUnit)
}
};