2009-04-02 6 views
0

J'ai un champ de type entier dans la base de données qui a la propriété "Not Null". Quand je crée une vue & faire une validation, si je laisse ce champ vide, il le considérera comme 0 donc je ne peux pas le comparer avec 0 parce que si quelqu'un insère une valeur 0 alors il sera considéré comme erreur!comment vérifier la valeur null du champ de type Integer dans la vue ASP.NET MVC?

un autre problème est que j'utilise Model error comme décrit dans le livre "ASP.NET MVC 1.0" @ Scott Gu blog. Et je vérifie la valeur dans la classe partielle de l'objet (créé par LINQ-To-SQL). i.e

public partial class Person 
{ 
    public bool IsValid 
    { 
     get { return (GetRuleViolations().Count() == 0); } 
    } 
    public IEnumerable<RuleViolation> GetRuleViolations() 
    { 
     if (String.IsNullOrEmpty(Name)) 
      yield return new RuleViolation("Name is Required", "Name"); 
     if (Age == 0) 
      yield return new RuleViolation("Age is Required", "Age"); 
     yield break; 
    } 
    partial void OnValidate(ChangeAction action) 
    { 
     if (!IsValid) 
      throw new ApplicationException("Rule violations prevent saving"); 
    } 
} 

Il existe également un problème de portée.

Comme dans la base de données si j'ai déclaré smallint c'est-à-dire court dans C#, maintenant si je dépasse cette plage, alors il donne une erreur comme "Une valeur est demandée".

Alors, finalement, y a-t-il un meilleur moyen de validation dans ASP.NET MVC?

Répondre

1

vous pouvez changer votre code avec un type Nullable?

Dim i As Nullable(Of Integer) 


    MsgBox(i.HasValue) 
    'result is false 

    i = 1 
    MsgBox(i.HasValue) 
    'result is true 

    i = Nothing 
    MsgBox(i.HasValue) 
    'result is false 
0

Je ne suis pas vraiment à jour avec les détails de MVC, mais n'y at-il pas un moyen de changer la valeur par défaut de l'âge à -1? De cette façon vous avez une valeur à vérifier et les gens peuvent toujours entrer 0.

Une autre solution pourrait être d'utiliser un intensible null. Vous pouvez le faire en ajoutant un? au type.

HTH.

Jonathan

+0

Mais si nous ne saisissez aucune valeur alors il Considérons 0. donc nous ne pouvons pas le vérifier avec -1. – Vikas

+0

Je ne comprends pas ce que vous dites ici. Une valeur par défaut est une valeur par défaut (ce qui signifie qu'elle devrait avoir cette valeur chaque fois qu'aucune valeur n'a été définie). Si vous voulez dire pour le type nullable, alors la valeur est nulle si rien n'a été défini. –

0

Je validerait le formulaire sur le client d'abord. Si l'âge est 0 alors faites savoir à l'utilisateur que ce n'est pas un âge valide. Sur le serveur changer le message, il est trompeur:

if (Age == 0) 
    yield return new RuleViolation("0 years is not a valid age", "Age"); 

Je sais que parce que vous liez à une propriété de modèle de votre entité Person il obtient 0 comme valeur par défaut - pourquoi ne vous changez pas dans la base de données, ? Définissez une valeur par défaut dans la base de données que vous considérez comme raisonnable pour l'âge de l'utilisateur, afin qu'elle ne s'affiche plus en tant que 0 pour les nouvelles entités.

Si vous ne souhaitez pas modifier les valeurs de base de données, utilisez jQuery pour définir les valeurs de la zone de texte pour les chaînes vides sur votre page Créer lors du chargement. Si l'utilisateur essaie de soumettre un tel formulaire, vous pouvez vérifier sur le client pour l'interdire et sur le serveur vous n'avez rien à faire, l'utilisateur recevra un message "Une valeur est requise".

Par ailleurs, vous avez écrit:

je ne peux pas le comparer avec 0 parce que si quelqu'un insérer une valeur 0, alors il être considéré comme erreur

Je ne voir un problème dans ce modèle de domaine particulier. Pensez-vous que cet âge de 0 est une bonne valeur ou pas? Demande toi.

0

vérifier avec Utilities.GetNullableInt32(textbox1.Text.Trim());

si u vérifier avec cette fonction GetNullableInt32() si l'utilisateur valeur saisie « 0 » il sauvé comme NUll dans votre table

Questions connexes