【问题标题】:Text field generated instead of numeric生成文本字段而不是数字
【发布时间】:2016-12-18 12:45:40
【问题描述】:

给定一个模型,其属性定义为

[Display(Name = nameof(Amount), ResourceType = typeof(Resources.ViewModels.MyViewModel))]
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Generic))]
[Range(0.1, double.MaxValue, ErrorMessageResourceName = "AboveZero", ErrorMessageResourceType = typeof(Resources.Generic))]
public decimal Amount { get; set; }

在视图中用作:

<input id="amount" asp-for="Amount" class="form-control" />

生成&lt;input type="text" ...&gt;

如果我添加type="number",它会正确生成一个数字字段。这是错误还是小数的处理方式不同?如果是,为什么?

【问题讨论】:

    标签: c# html asp.net-core


    【解决方案1】:

    这不是错误。 Asp.net Core 将十进制类型映射到文本字段: 见InputTagHelper.cs

     private static readonly Dictionary<string, string> _defaultInputTypes =
            new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
            {
                { "HiddenInput", InputType.Hidden.ToString().ToLowerInvariant() },
                { "Password", InputType.Password.ToString().ToLowerInvariant() },
                { "Text", InputType.Text.ToString().ToLowerInvariant() },
                { "PhoneNumber", "tel" },
                { "Url", "url" },
                { "EmailAddress", "email" },
                { "Date", "date" },
                { "DateTime", "datetime" },
                { "DateTime-local", "datetime-local" },
                { "Time", "time" },
                { nameof(Byte), "number" },
                { nameof(SByte), "number" },
                { nameof(Int16), "number" },
                { nameof(UInt16), "number" },
                { nameof(Int32), "number" },
                { nameof(UInt32), "number" },
                { nameof(Int64), "number" },
                { nameof(UInt64), "number" },
                { nameof(Single), InputType.Text.ToString().ToLowerInvariant() },
                { nameof(Double), InputType.Text.ToString().ToLowerInvariant() },
                { nameof(Boolean), InputType.CheckBox.ToString().ToLowerInvariant() },
                { nameof(Decimal), InputType.Text.ToString().ToLowerInvariant() },
                { nameof(String), InputType.Text.ToString().ToLowerInvariant() },
                { nameof(IFormFile), "file" },
                { TemplateRenderer.IEnumerableOfIFormFileName, "file" },
            };
    

    【讨论】:

    • 有什么原因吗?
    • 浏览器在数字类型字段中如何处理十进制类型存在不一致。例如,Chrome 需要(以前需要?) step 属性才能处理十进制数。 MVC 开发人员决定对所有十进制类型值使用文本类型。在这里查看讨论github.com/aspnet/Mvc/issues/2712
    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多