我在项目中使用了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
,并为Name
,Email
和Contact
字段输入文本框。
当我提交此表单时,我使用了以下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时,由于Address
和Detail
字段是必填字段并且以null
值发布,它会抛出异常。
我不想在此表单中添加此字段。
如何为这两个字段或其他一些内容Data Annonation
取消成功发布此表单数据。
答案 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个视图模型,这些模型将对每个视图进行单独检查。 一个用于姓名,电子邮件和联系人,另一个用于地址和详细信息。