MVC 4-annotations de données-Validation de Type

j'ai le code suivant qui fonctionne

    [Required(ErrorMessage = "Price is required.")]
    [Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price xx.xx")]
    public decimal? productPrice { get; set; }

lorsque la page est soumise avec Prix = champ vide le message d'erreur est " Price is required.". Prix = plus de 9999 le message d'erreur est " prix xx.xx".

cependant, quand je tape 'aaaa' le message d'erreur est <!-Le prix du produit de champ doit être un nombre."

Comment puis-je changer le message si vous tapez Non correct? Comme: "le prix doit être un nombre décimal entre 1-9999.

---- MISE à jour: ---- Le code ci-dessous travaillé avec

NULL, Pas de Virgule, Entre Plage, MAIS pas de travail ".1".

    [Required(ErrorMessage = "Price is required.")]
    [RegularExpression(@"[0-9]*.?[0-9]+", ErrorMessage = "Price must be a Numbers only.")]
    [Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price must be a decimal/number between {1} and {2}.")]
    public decimal? productPrice { get; set; }
12
demandé sur Ravi Ram 2012-08-28 21:48:08

3 réponses

Vous pouvez essayer avec l'expression régulière:

[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "{0} must be a Number.")]

vous pouvez également essayer les Extensions D'Annotations de données: http://dataannotationsextensions.org/Home/Wiki

ou écrire votre propre implémentation,quelque chose comme ceci : https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/DigitsAttribute.cs

UPDATE Avec REGEX (correspond à 9 999$.99 / 0,70 $| .1)

[RegularExpression(@"^$?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$", ErrorMessage = "{0} must be a Number.")]

Ou à l'aide de Gamme avec une légère modification à @Martin suggestion (en fait, est une meilleure solution):

[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
12
répondu JOBG 2012-08-29 01:14:56

tout d'Abord, je pense que vous souhaitez modifier votre Gamme attribut

[Range(typeof(Decimal), "1", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

selon MSDN, ceci est la façon valide d'utiliser RangeAttribute.

Deuxième:

il s'agit en fait d'une validation JavaScript discrète côté client. Votre validateur de plage se déclenchera après que le nombre a été validé. Vous pouvez désactiver le validateur de nombre bien que je ne recommandons pas cela:

$.validator.methods.number = function (n, t) {
    return true;
}
5
répondu Martin Devillers 2012-08-28 18:04:05

je pense que vous avez peut-être trébuché sur un bug à jQuery. Cette validation combat la substance émise pour vos attributs de validation.

j'ai la propriété suivante:

[Display(ResourceType = typeof(TaxSetupResources), Name = "Model_Value")]
[RegularExpression(@"(^\d+$)|(^\.\d{1,4}$)|(^\d*\.\d{0,4}$)", ErrorMessageResourceName="Model_InvalidFormatForAmount", ErrorMessageResourceType=typeof(TaxSetupResources))]
public decimal? Value { get; set; }

utilisé dans une vue comme celle-ci:

<div>
    @Html.TextBoxFor(t => t.Tiers[i].Value, new { title = @Resources.TaxSetupResources.Model_ValueTip })
    <br />@Html.ValidationMessageFor(t => t.Tiers[i].Value)
</div>

juste par lui-même, une valeur "foo" fournit mon message d'erreur. Une valeur de 0,075 est acceptée. Une valeur de .075 rendements "La Valeur du champ doit être un nombre", le même problème que vous semblez avoir.

en fonction de ce DONC l'article, j'ai ajouté ce qui suit dans le document prêt:

$(function () {
    $.validator.methods.number = function (value, element) {
        return parseFloat(value).toString() !== "NaN";
    }
});

maintenant je ne reçois que mon message d'erreur, et seulement quand je m'y attends (.075 est acceptée).

0
répondu Elton 2017-05-23 11:54:53