【问题标题】:Error Validating Models where table fields don't allow nulls验证表字段不允许空值的模型时出错
【发布时间】:2010-09-28 21:06:34
【问题描述】:

我正在使用 .NET 4.0 和实体框架进行一些服务器端验证。我有一个名为“联系人”的简单表格,如下所示:

ID int 不允许空值
名字 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,它表示该属性不能设置为空值。如果我将字段设置为全部接受空值,则代码可以正常工作并且不会发生此错误,并且会检查模型以查看它是否像预期的那样有效。请问这里出了什么问题??

谢谢

【问题讨论】:

  • global::System.String - 我不得不承认这看起来很有趣的编码约定 :-)
  • @Darin - 该部分由实体框架生成。

标签: c# asp.net-mvc entity-framework asp.net-mvc-2


【解决方案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; }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多