asp.net mvc 3 SelectList 十进制类型

zgi*_*rod 1 .net asp.net-mvc-3

我有一个十进制值,我试图将其包含在下拉列表中,但所选值不起作用。我把代码弄乱了一段时间,但没有运气。最终我使用了完全相同的代码,但将所有内容从十进制更改为 int 并且它有效。

之前(InitialRewardPercent 是一个小数):

@Html.DropDownListFor(x => x.InitialRewardPercent, CommonServices.GetRewardTermInitialPercents(Model.InitialRewardPercent))

CommonServices.GetRewardTermInitialPercents 返回一个选择列表并选择我传入的值:

return new SelectList(rewardTermInitialPercents, "Percent", "PercentDisplay", selectedPercent);

之后(InitialRewardPercent 是一个整数):

@Html.DropDownListFor(x => x.InitialRewardPercent, CommonServices.GetRewardTermInitialPercents(Model.InitialRewardPercent * 100))

我做了 * 100 是因为我想从 0.25 到 25。基本上我所做的就是将变量类型从十进制切换到 int 并且 SelectList 现在正确地将正确的行标记为选定的。

其他任何人都可以让 SelectList 使用十进制值还是我做错了什么?

Hat*_*ath 5

我有一个类似的问题。

我是decimal.ToString()用来设置SelectListItem.Value所以(4.5m).ToString() == "4.5"

但是模型属性会添加一个额外的零,因为它在数据库中存储为 4.50m 所以 (4.50m).ToString() == "4.50"

在我的情况下的修复是使用格式化的字符串 -decimal.ToString("0.00")所以它与模型属性相同。

public static IList<SelectListItem> ToSelectList(this IEnumerable<decimal> values, string format = "0.00")
{
            return values
                .Select(x => new SelectListItem() { Text = x.ToString(), Value = x.ToString(format) })
                .ToList();
}
Run Code Online (Sandbox Code Playgroud)