2016-12-17 29 views
0

鑑於與屬性的模型定義爲文本字段生成,而不是數字

[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" /> 

生成<input type="text" ...>

如果我添加type="number"它正確地生成一個數字字段。這是一個錯誤還是小數被區別對待,如果是這樣,爲什麼?

回答

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" }, 
     }; 
+0

任何原因? –

+0

瀏覽器在數字類型字段中如何處理小數類型是不一致的。例如,Chrome需要(用於需要?)步驟屬性才能使用十進制數字。 MVC開發人員決定爲所有十進制類型值使用文本類型。見這裏的討論https://github.com/aspnet/Mvc/issues/2712 – Ross

+0

噢好吧,謝謝 –

相關問題