2010-09-28 99 views
1

我正在使用.NET 4.0和實體框架來執行一些服務器端驗證。我有一個簡單的表名爲 「聯繫人」,看起來像這樣:錯誤驗證表格字段不允許爲空值的模型

ID INT不要允許空
名字爲nvarchar(50)不要允許空
SecondName爲nvarchar(50)不要允許空
移動電話號碼爲nvarchar(50)不允許爲空
HomeNumber nvarchar(50)允許空值

我有一個ContactController和一個類型爲Contact的強類型視圖,它顯示了編輯文本框。當我點擊「創建」,試圖建立新的聯繫我有如下一個控制器方法:

[HttpPost] 
    public ActionResult Create(Contact contact) 
    { 

     if (ModelState.IsValid) 
     { 

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

     return View(); 

    } 

如果我按下按鈕,不輸入任何我的代碼打破它到達這裏之前。的錯誤出現在Contacts.Designer.cs在這一行:

_FirstName = StructuralObject.SetValidValue(值, 假);

[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(); 
     } 
    } 

這是一個ConstraintException,它說這個屬性不能被設置爲空值。如果我將字段設置爲全部接受空值,那麼代碼將起作用,並且此錯誤不會發生,並且將檢查模型以查看它是否像預期的那樣有效。請問這裏出了什麼問題?

謝謝

+0

'global :: System.String' - 我不得不承認,這看起來有趣的編碼約定:-) – 2010-09-28 21:20:01

+0

@Darin - 這部分是由實體框架生成的。 – 2010-09-28 21:22:53

回答

1

下面是解決方案。我不得不

[DisplayFormat(ConvertEmptyStringToNull =假)]

註釋添加到不允許空值的字段。這個錯誤有一個完整的解釋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; } 

} 
相關問題