此代码显示一个带有一些选项的下拉框。选项是小数。用户选择一个,然后按保存。在回发时,应在下拉框中选择所选选项。这不是字符串的问题。此代码使用小数。当回发回来时,没有选择任何内容。我认为 ASP.NET MVC 由于小数精度而无法匹配。
要在下拉框中显示的小数列表
public static List<decimal> MyCustomFieldOptions
{
get
{
var x = new List<decimal>();
x.Add(0.10m);
x.Add(0.25m);
return x;
}
}
视图模型上的属性:
[UIHint("MyCustomField")]
public decimal MyCustomField { get; set; }
在视图中:
@Html.EditorFor(model => model.MyCustomField)
编辑器模板:
@model decimal
@Html.DropDownListFor(x => x, new SelectList(ProjectNamespace.MyViewModel.MyCustomFieldOptions), new {size="2"})
/Shared/EditorTemplates/MyCustomField.cshtml
此代码正确显示一个列表框,其中有两个选项可供选择。用户可以选择一个,按保存,控制器获取值。控制器将看到0.25
或0.1
。但是,当页面返回时,不再选择该项目。
我很确定这是因为小数精度问题。
@Model.MyCustomField.ToString()
返回0.250
。
注意编辑器模板输出的内容:
<select id="MyCustomField" name="MyCustomField" size="2">
<option>0.10</option>
<option>0.25</option>
</select>
选项的小数精度不同。 0.25
, 不是0.250
所以它可能无法匹配。
我读了这篇SO 文章,它给了我创建编辑器模板和查看小数精度的提示。