2015-05-26 21 views
6

ho questo campo:Il campo deve essere un numero

public decimal Price { get; set; } nel database è decimale (7,2).

Vista:

@Html.EditorFor(model => model.Price, 
       new { htmlAttributes = new { @class = "form-control" } }) 

se ho messo un valore con virgola, MVC validazione di default non accetta, dice: "The field must be a number". (Ho provato utilizzare un Regex, ma nessun modo)

Ad esempio: 5,00, 55,00 or 555,00

anche questo:

public DateTime date { get;set; } 

Vista:

@Html.EditorFor(model => model.Date, 
       new { htmlAttributes = new { @class = "form-control" } }) 

MVC validazione di default non accetta date nel formato dd/mm/yyyy, solo in mm/dd/yyyy.

Ad esempio: 13/02/2015, 15/06/2013, 25/08/2012

è qualcosa con la globalizzazione o che cosa? Come posso risolvere questo?

+0

Ci sono due domande diverse, è meglio creare una domanda separata. Per il formato datetime è possibile utilizzare l'impostazione di globalizzazione e aggiornare il thread per qualsiasi cultura che si desidera. Per la prima domanda puoi usare il tipo di dati di Money invece di int – Peyman

+0

Stai assegnando da una stringa? Possiamo vedere il codice dove si assegna il valore? –

+0

Questo è davvero un problema di globalizzazione. Stai riscontrando problemi con la convalida lato client, lato server o entrambi? –

risposta

0

Si consiglia di decorare il vostro campo con l'attributo [DisplayFormat] come muggito:

[DisplayFormat(DataFormatString = "{0:N}", ApplyFormatInEditMode = true)] 
public decimal Price { get; set; } 
+3

No, lo stesso errore. – developer033

0

Ho lo stesso problema, che ho usato per risolverlo con la libreria globalizzazione (globalize.js), ma hanno cambiato così non include i file di localizzazione. Dovrebbe prenderli dalla biblioteca di Cldr, ma non ho capito come.

1

È necessario contrassegnare la proprietà con [DataType(DataType.Currency)].

[DataType(DataType.Currency)] 
public decimal Price { get;set;} 
0

Potreste trovare la risposta qui error with decimal in mvc3 - the value is not valid for field, non ha funzionato per me, così ho usato questa temporanea

<div class="col-md-10"> 
      @{ Html.EnableClientValidation(false); } 
      @Html.EditorFor(model => model.DecimalValue, new { htmlAttributes = new { @class = "form-control" } }) 
      @{ Html.EnableClientValidation(true); } 
      @Html.ValidationMessageFor(model => model.DecimalValue, "", new { @class = "text-danger" }) 
     </div> 

e ho trovato questo qui ASP .NET MVC Disable Client Side Validation at Per-Field Level

8

Una soluzione che ho trovato è stato quello di sostituisci le funzioni di convalida di jquery.validate.js


<script> 

    $.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); 
    } 
    //Date dd/MM/yyyy 
    $.validator.methods.date = function (value, element) { 
     var date = value.split("/"); 
     return this.optional(element) || !/Invalid|NaN/.test(new Date(date[2], date[1], date[0]).toString()); 
    } 
</script> 
+1

Funziona come un fascino. – Yoshi