2010-09-28 8 views
1

J'utilise .NET 4.0 et le framework d'entité pour effectuer une validation côté serveur. J'ai une table simple appelé "Contacts" qui ressemble à ceci:Erreur de validation des modèles où les champs de table n'autorisent pas les valeurs nulles

ID int Dont Null autorisé
FirstName nvarchar (50) Dont Null autorisé
SecondName nvarchar (50) Dont Null autorisé
numéro de téléphone portable nvarchar (50) Ne Null autorisé
HomeNumber nvarchar (50) Null autorisé

J'ai un ContactController et une vue fortement typée de contact de type qui affiche les modifier textboxes. Lorsque je clique sur « Créer » pour essayer de créer un nouveau contact, j'ai une méthode du contrôleur comme ci-dessous:

[HttpPost] 
    public ActionResult Create(Contact contact) 
    { 

     if (ModelState.IsValid) 
     { 

      ContactService.CreateContact(contact); 
      RedirectToAction("Index"); 
     } 

     return View(); 

    } 

Si j'appuie sur le bouton sans entrer quoi que ce soit mes pauses de code avant qu'il ne soit ici. L'erreur vient dans les Contacts.Designer.cs à cette ligne:

_FirstName = StructuralObject.SetValidValue (valeur, false);

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.String FirstName 
    { 
     get 
     { 
      return _FirstName; 
     } 
     set 
     { 
      OnFirstNameChanging(value); 
      ReportPropertyChanging("FirstName"); 
      _FirstName = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("FirstName"); 
      OnFirstNameChanged(); 
     } 
    } 

C'est un ConstraintException et il dit cette propriété ne peut pas être réglé sur une valeur nulle. Si je place les champs à tous accepter des valeurs nulles alors le code fonctionne et cette erreur ne se produit pas et le modèle est vérifié pour voir s'il est valide comme prévu. Qu'est-ce qui ne va pas ici s'il vous plaît ??

Merci

+0

'globale :: System.String' - Je dois admettre que cela semble intéressant :-) convention de codage –

+0

@Darin - Cette partie est générée par Entity Framework. –

Répondre

1

Voici la solution. Je devais ajouter

[DisplayFormat (ConvertEmptyStringToNull = false)]

annotation sur le terrain ne permettant pas nulls. Il y a une explication complète de cette erreur here.

[MetadataType(typeof(Contact_Validate))] 
public partial class Contact 
{ 



    public string FullName() 
    { 

     return _FirstName + " " + _SecondName; 
    } 


} 

public class Contact_Validate 
{ 
    [Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string FirstName { get; set; } 

    [Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string SecondName { get; set; } 

    [Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string MobileNumber { get; set; } 
    public string HomeNumber { get; set; } 

} 
Questions connexes