2010-12-04 13 views
4
public Decimal SalePrice { get; set; } 

etentery de données décimales dans ASP MVC

<%= Html.TextBoxFor(Model => Model.SalePrice) %> 

Qu'est-ce qu'un bon moyen d'assurer la validation ou l'entrée d'entrée correcte de l'utilisateur? Des choses comme ne permettent que des entrées numériques et jusqu'à deux décimales?

Répondre

7

Une expression régulière comme ce qui suit devrait fonctionner:

\A\d+(\.\d{1,2})?\Z 

Cela correspond à l'entrée comme:

2.00 
25.70 
04.15 
2.50 
525.43 
423.3 
52 

Et, comme l'a suggéré Mike, vous pourriez utilisez ceci dans un attribut de validation de données:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
public Decimal SalePrice { get; set; } 

Edit: En réponse à vos deux questions:

1) Ceci valide le soumettons droit et non lorsque nous perdons point de ce champ?

En supposant que tout ce que vous avez ajouté est l'attribut, alors la validation est effectuée sur submit. Techniquement, la validation se produit une fois que les paramètres de formulaire sont liés au modèle. Cependant, pour réellement faire usage de cela, vous devez vérifier le paramètre de validation de votre commande:

public ActionResult MyController(MyModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // do stuff 
    } 
    else 
    { 
     // Return view with the now-invalid model 
     // if you've placed error messages on the view, they will be displayed 
     return View(model); 
    } 
} 

Pour avoir la validation se côté client en plus de côté serveur, vous aurez besoin d'utiliser javascript. Un exemple de base de cette validation Microsoft AJAX est à Scott Gu's blog.

2) Pouvez-vous me montrer le regex où l'entrée max ne peut pas dépasser 100,00 et entrée min ne peut pas être inférieure à 1,00

Vous pourriez probablement faire en regex en quelque sorte, mais regex est pas vraiment conçu pour rien plus de correspondance de modèle. Une meilleure façon de le faire serait d'ajouter un attribut de validation de plage, en plus de votre attribut regex. Alors maintenant, votre propriété devrait ressembler à:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
[Range(1.00m, 100.00m)] 
public Decimal SalePrice { get; set; } 

Le code ci-dessus n'a pas été testé, mais l'approche générale devrait fonctionner.

+0

Merci et bonne explication d'ailleurs. Je vais certainement essayer cela. – VoodooChild

1

Vous pouvez utiliser une chaîne regex pour valider l'entrée côté client et côté serveur.

Si vous mettez un attribut RegularExpression sur votre action de contrôleur, vous pouvez spécifier à l'aide d'une chaîne regex le format que ce champ doit suivre. En utilisant cet attribut, vous gagnerez à la fois la validation côté client et côté serveur (en supposant que vous utilisez MVC 2.0 ou version ultérieure).

[RegularExpression("*YourRegexExpression*", ErrorMessage="You must provide a decimal value.")] 

J'espère que cela aide.

Voir l'article de Scott Gu sur la validation des modèles pour plus d'informations.

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

Mike