我正在使用.NET 4.0和实体框架来进行一些服务器端验证。我有一个名为“Contacts”的简单表格,如下所示:
ID int不允许空值
FirstName nvarchar(50)不允许空值
SecondName nvarchar(50)不允许空值
MobileNumber 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(value, 假);
[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,它说这个属性不能设置为空值。如果我将字段设置为all接受空值,则代码可以正常工作,并且不会发生此错误,并且会检查模型以查看它是否像预期的那样有效。这里出了什么问题?
由于
答案 0 :(得分:1)
这是解决方案。我不得不添加
[DisplayFormat(ConvertEmptyStringToNull = false)]
该字段的注释不允许空值。有关此错误的完整说明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; }
}