2009-12-19 8 views
2

J'ai un problème de validation d'erreur avec un int.Validation d'erreur ASP.Net MVC

Je validation pour un nom de client:

if (String.IsNullOrEmpty(CustomerName)) 
      yield return new RuleViolation("Customer Name Required", "CustomerName"); 

maintenant si je veux ajouter la validation d'une ville, dans ce cas, j'ai un CityID qui obtient enregistré en tant que type int, donc je ne peux pas écrire mon instruction if de la même manière ... car il n'y a pas de méthode int.IsNullOrEmpty. Disons que l'utilisateur n'a pas sélectionné la liste déroulante pour la ville - il s'agit essentiellement d'économiser sans valeur.

Quelle est la meilleure façon d'écrire ma déclaration de validation pour un int?

MISE À JOUR: Voici un exemple de ce que j'ai pour ma forme à mon avis:

<% using (Html.BeginForm()) 
    {%> 

    <fieldset> 
     <legend>Add a new customer</legend> 
     <p> 
      <label for="CustomerName">Customer Name:</label> 
      <%= Html.TextBox("CustomerName")%> 
      <%= Html.ValidationMessage("CustomerName", "*")%> 
     &nbsp;&nbsp; 
      <label for="CityID">City:</label> 
      <%= Html.DropDownList("CityID", Model.Cities as SelectList, "Select City")%> 
      <%= Html.ValidationMessage("CityID", "*")%> 
     &nbsp;&nbsp; 
      <input type="submit" value="Create New Customer" /> 
     </p> 
    </fieldset> 

<% } %> 

et mon modèle de vue ressemble à ceci:

public class CustomerFormViewModel 
{ 
    //Properties 
    public Customer Customer { get; set; } 
    public SelectList Cities { get; set; } 

    //Constructor 
    public CustomerFormViewModel(Customer customer) 
    { 
     CustomerRepository customerRepository = new CustomerRepository(); 
     Customer = customer; 
     Cities = new SelectList(customerRepository.FindAllCities(), "CityID", "CityName"); 
    } 
} 

Répondre

1

utilisation ints nullables,

int? i = null; 
0

Vous pouvez définir une valeur par défaut dans la configuration de l'itinéraire. Si vous définissez la valeur par défaut à une valeur que vous savez n'est pas valide, vous pouvez simplement vérifier cette valeur. Si vos villes sont numérotées de 1 à X, définissez la valeur par défaut sur -1 et vérifiez cela.

0

Si vous obtenez l'entrée dans un format de chaîne, essayez d'utiliser l'expression régulière pour valider le format entier. Si vous obtenez la valeur au format entier, il vous suffit de vérifier si la valeur est supérieure ou égale à 0.

1

J'avais exactement la même exigence il y a une semaine. Vous pouvez résoudre cela de deux façons.

1) Dropdown vous aurez toujours "S'il vous plaît Sélectionnez" avec une valeur par défaut comme -1. Lorsqu'un formulaire est soumis et qu'aucune ville n'est sélectionnée, le modèle MVC liera -1 (valeur par défaut) pour CityID. Ainsi, vous pouvez toujours vérifier si CityID> 0 sinon "Raise erreur"

2) Utilisez C# 3.0 fonction Nullable Int (int?) pour CityID qui signifie que votre CityID peut aussi être nulle. Si aucune valeur n'est passée pour CityID, votre cityID sera toujours nulle.

+0

J'apprécie votre aide, même si je ne comprends pas très bien comment donner "Please Select", sa valeur par défaut est -1. Je suis en mesure de l'obtenir pour dire "S'il vous plaît sélectionner", mais je ne sais pas où spécifier quelle est sa valeur. J'ai mis à jour ma question avec le code qui est à mon avis pour montrer ce que j'ai actuellement. – Ben

+0

Lorsque vous créez une liste déroulante, elle aura le texte et la valeur. J'affecte toujours Value comme -1 et Text comme "Please Select". Lorsqu'un formulaire est soumis, la valeur affichée contiendra "-1" comme CityID dans votre exemple. –