如果字典键为可为空的十进制,则 Mvc 选择列表不会绑定
本文关键字:选择 Mvc 列表 绑定 十进制 字典 如果 | 更新日期: 2023-09-27 18:35:15
为什么我的下拉列表没有绑定?使用 DropDownListFor Razor 帮助程序函数。
视图:
@Html.DropDownListFor(m => m.ModelObject.VatRate, Model.VatRatesList)
视图模型:
public SelectList VatRatesList
{
get
{
return new SelectList(
new Dictionary<decimal, string>
{
{ 0m, string.Empty },
{ 1.2m, "20%" },
{ 1m, "0%" }
}, "Key", "Value",
ModelObject.VatRate ?? 0m);
}
}
谢谢。
更新
经过进一步调查,我发现这与我试图绑定的模型属性有关。它是一个可为空的小数。当我将其更改为小数时,从列表中选择了正确的值。
这就是事情开始变得奇怪的地方。如果我对字典键使用 4 位小数,它适用于可为空的十进制模型属性。换句话说,这有效:
public SelectList VatRatesList
{
get
{
return new SelectList(
new Dictionary<decimal, string>
{
{ 0.0000m, string.Empty },
{ 1.2000m, "20%"},
{ 1.0000m, "0%"}
}, "Key", "Value");
}
}
我不知道为什么。也许 html 助手在内部使用 ToString()。我认为 ToString() 会给出十进制的 4dp 字符串表示。我必须查看MVC源代码才能找到答案。
确切的代码对我有用(看不到模型/视图的其余部分,因此很难确定问题)。这是我使用的代码:
控制器:
public ActionResult Index()
{
var model = new Model();
model.ModelObject = new ModelObject();
model.ModelObject.VatRatesList = new SelectList(
new Dictionary<decimal, string>
{
{ 0m, string.Empty },
{ 1.2m, "20%" },
{ 1m, "0%" }
}, "Key", "Value",
model.ModelObject.VatRate ?? 0m);
return View(model);
}
视图:
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.ModelObject.VatRate, Model.ModelObject.VatRatesList)
<input type="submit" value="Submit me"/>
}
控制器开机方法:
[HttpPost]
public ActionResult Index(Model model)
{
//Breakpointing on the below line, I can see model.ModelObject.VatRate
return RedirectToAction("Index");
}
我使用了这两个类:
public class Model
{
public ModelObject ModelObject { get; set; }
}
public class ModelObject
{
public decimal? VatRate { get; set; }
public SelectList VatRatesList { get; set; }
}