2010-09-28 100 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; } 

} 
相关问题