c# - 如果字典键为可为空的十进制,则 Mvc SelectList 不绑定(bind)

标签 c# .net asp.net-mvc asp.net-mvc-3 razor

为什么我的下拉列表没有约束力?使用 DropDownListFor Razor 辅助函数。

查看:

@Html.DropDownListFor(m => m.ModelObject.VatRate, Model.VatRatesList)

View 模型:

    public SelectList VatRatesList
    {
        get
        {
            return new SelectList(
                new Dictionary<decimal, string>
                {
                    { 0m, string.Empty },
                    { 1.2m, "20%" },
                    { 1m, "0%" }
                }, "Key", "Value",
                ModelObject.VatRate ?? 0m);
        }
    }

谢谢。

最佳答案

更新

经过进一步调查,我发现这与我尝试绑定(bind)的模型属性有关。它是一个可为空的小数。当我将其更改为小数时,会从列表中选择正确的值。

这里是事情开始变得奇怪的地方。如果我为字典键使用 4 个小数位,它适用于可为 null 的十进制模型属性。换句话说,这有效:

 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 源代码以找出答案。

关于c# - 如果字典键为可为空的十进制,则 Mvc SelectList 不绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10752904/

相关文章:

c# - 在 ASP.NET Core 中引用现有的 .NET Framework 项目

asp.net - asp.net-mvc 中未发现错误

c# - 使用后台 worker 高效写入 GUI 线程

c# - 如何正确地将 Popup 绑定(bind)到 ToggleButton?

c# - Azure Function,返回状态码+JSON,无需在每个逻辑部分定义返回

c# - 插入日志事件时,TimeCreated 字段不够准确

javascript - 关于Javascript注入(inject)的问题

c# - 查找选定的 WPF 列表框条目

.net - Windbg 中的 WaitForMultipleObjects 是否表明 .NET 应用程序中的事件存在问题?

.net - System.Web.Razor 与 System.Web.WebPages.Razor