以某些形式MVC进行Nullify数据验证

时间:2016-03-08 07:15:41

标签: c# asp.net-mvc http-post data-annotations actionresult

我在项目中使用了Data Annonation来验证我的模态。例如,我有一个具有以下Data Annonation属性

的类
 public class tbl_store
 {
    [Required(ErrorMessage = "Name is required")]
    public string Name{ get; set; }
    [Required(ErrorMessage = "Email is required")]
    [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]
    public string Email{ get; set; }
    [Required(ErrorMessage = "Phone Number is required")]
    [DataType(DataType.PhoneNumber, ErrorMessage = "Invalid Phone Number")]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Invalid Phone number")]
    public string Contact{ get; set; }
    [Required(ErrorMessage = "Address is required")]
    public string Address{ get; set; }
    [Required(ErrorMessage = "Detail is required")]
    public string Detail{ get; set; }
}

现在我有一个表单,它将上述类用作Model,并为NameEmailContact字段输入文本框。

当我提交此表单时,我使用了以下ActionResult方法

  [HttpPost]
    public ActionResult createStore(tbl_store modal)
    {
        try
        {
            using (joyryde_storeEntities context = new joyryde_storeEntities())
            {

                    tbl_store objStore = new tbl_store()
                    {
                        Name = modal.Name,
                        Email = modal.Email,
                        Contact = modal.Contact                          
                    };
                    context.tbl_store.Add(objStore);
                }                   
                context.SaveChanges();
            }
        }
        catch (DbEntityValidationException ex)
        {

        }
       // Some more code
    }  

此处Context.SaveChanges()异常抛出消息System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

当我调试expcetion时,由于AddressDetail字段是必填字段并且以null值发布,它会抛出异常。

我不想在此表单中添加此字段。

如何为这两个字段或其他一些内容Data Annonation取消成功发布此表单数据。

2 个答案:

答案 0 :(得分:1)

您必须使用视图模型。视图模型是用于创建具有来自主模型的差异属性和属性的模型的一些模型。在模型目录中创建viewmodel目录,并添加不需要curl: (1) Protocol "curl https" not supported or disabled in libcurl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 curl: (6) Could not resolve host: application address的新模型。

答案 1 :(得分:0)

这里的问题不是您使用/不使用视图模型。问题是你的数据库。我假设您使用的是EF Code First。您必须从实体中删除必需属性才能将其保存到数据库,而不会出现您现在面临的错误。如果您不使用EF Code First,除了删除属性外,还必须更改数据库以允许2列中的NULL值。

但是,如果您想要另一个需要这两个字段的视图,则必须使用2个视图模型,这些模型将对每个视图进行单独检查。 一个用于姓名,电子邮件和联系人,另一个用于地址和详细信息。