2016-09-04 17 views
1

我遇到ASP.NET Core MVC和decimal?值的問題。如何綁定可爲空的十進制值

我有以下視圖模型:

public class BlobViewModel 
{ 
    public int Id { get; set; } 
    public int? IntegerValue { get; set; } 
    public string StringValue { get; set; } 
    [DataType(DataType.Date)] 
    public DateTime? DateValue { get; set; } 
    public decimal? DecimalValue { get; set; } 
} 

而下面的輸入元件在我的視圖

<input asp-for="DecimalValue" class="form-control" /> 

當我輸入一個十進制值,例如「68.5」或「68.5」,然後切換出輸入的元素,我得到以下錯誤:

The value '68.5' is not valid for DecimalValue.

我與[DataType(DataType.Currency)]屬性的屬性上面試過,但我似乎無法得到對工作有約束力。其他屬性按預期結合。

有沒有人有我如何做到這一點的想法?

+0

我已經不能重現這個在Basic .NET中的核心(RTM)項目。 –

回答

1

如果本地Windows設置未設置爲美國本地化,並且您使用默認asp.net模板jquery驗證來驗證小數值,則會出現錯誤。應該不論發生錯誤,如果你的小數nullable或不

ASP.NET Core我不認爲你可以強制定位到美國在web.config你在this回答讓你可以爲ASP.NET MVC5和早期以同樣的方式,所以你將不得不添加JavaScript來覆蓋jquery.validate.js作爲對同一問題的答案。

創建js文件名爲validationlocalization,並把它放在你的wwwroot\js文件夾包含以下內容

$.validator.methods.range = function (value, element, param) { 
    var globalizedValue = value.replace(",", "."); 
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); 
} 

$.validator.methods.number = function (value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); 
} 

在需要小數驗證cshtml網頁添加到您的腳本段的javascript文件的引用。確保它是一個參考後添加到現有的_ValidationScriptsPartial.

@section Scripts { 

    ... 

    <script src="~/js/validationlocalization.js"></script> 

More detail此變通辦法

+0

非常感謝。這正是需要的:-) –

相關問題