我有一個項目,我有一個數據庫模型類與一個單獨的EDMX EF模型一起提供。在相同的解決方案中,我有一個Web服務,它與模型類一起訪問此項目。我希望模型類對前端執行數據註釋以進行驗證,但是根本沒有得到驗證。DataAnnotations EntityFramework(數據庫優先)方法
爲簡潔起見,模型類(在我的Model項目中)如下所示。我的Web服務引用這個類並用作接口。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ServiceModel;
using System.Runtime.Serialization;
[DataContract]
[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{
}
public class CustomerMetaData
{
[DataMember]
public object CustomerID { get; set; }
[Required]
[StringLength(50)]
[DataType(DataType.EmailAddress)]
[DataMember]
public object Email { get; set; }
}
當我點擊窗體上的提交按鈕時,它會嘗試添加記錄並且不執行任何驗證。發生運行時錯誤,通知我該電子郵件地址是必需的。我顯然希望這個驗證可以在數據註釋之前完成。
我該如何做到這一點?
實際運行時錯誤回來說,當試圖添加記錄時,電子郵件地址不應該爲NULL。這是對的。數據庫列需要一個值。
我認爲通過在模型中使用數據註釋,如果前端出現問題,並且一旦表單試圖發佈,模型就無效,則相應的數據註釋錯誤應顯示在表單上。我的印象是,沒有必要編寫任何特定的客戶端驗證。該模型應該爲你照顧。這個假設我錯了嗎?
有網絡如何與CodeFirst做到這一點的文章,但我已經看到了如何與DataBaseFirst做到這一點沒有。這如何實現?
再次,我的客戶類如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ServiceModel;
using System.Runtime.Serialization;
namespace YeagerTechModel
{
[Serializable]
[DataContract]
//[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{
public Customer()
{
this.Projects = new HashSet<Project>();
}
[DataMember]
public short CustomerID { get; set; }
[Required]
[StringLength(50)]
[DataType(DataType.EmailAddress)]
[DataMember]
public string Email { get; set; }
[StringLength(50)]
[DataType(DataType.Text)]
[DataMember]
public string Company { get; set; }
[StringLength(50)]
[DataType(DataType.Text)]
[DataMember]
public string FirstName { get; set; }
[StringLength(50)]
[DataType(DataType.Text)]
[DataMember]
public string LastName { get; set; }
[StringLength(50)]
[DataType(DataType.Text)]
[DataMember]
public string Address1 { get; set; }
[StringLength(50)]
[DataType(DataType.Text)]
[DataMember]
public string Address2 { get; set; }
[StringLength(50)]
[DataType(DataType.Text)]
[DataMember]
public string City { get; set; }
[StringLength(2)]
[DataType(DataType.Text)]
[DataMember]
public string State { get; set; }
[StringLength(10)]
[DataType(DataType.Text)]
[RegularExpression(@"^\d{5}(-\d{4})?$")]
[DataMember]
public string Zip { get; set; }
[StringLength(12)]
[DataType(DataType.PhoneNumber)]
[DataMember]
public string HomePhone { get; set; }
[StringLength(12)]
[DataType(DataType.PhoneNumber)]
[DataMember]
public string CellPhone { get; set; }
[StringLength(100)]
[DataType(DataType.Url)]
[DataMember]
public string Website { get; set; }
[StringLength(50)]
[DataType(DataType.EmailAddress)]
[DataMember]
public string IMAddress { get; set; }
[DataMember]
public System.DateTime CreatedDate { get; set; }
[DataMember]
public Nullable<System.DateTime> UpdatedDate { get; set; }
public virtual ICollection<Project> Projects { get; set; }
}
}
當我在客戶端調試「if(ModelState.IsValid)」時,該屬性總是返回true。就好像DataAnnotations甚至沒有被識別。在調試時,我檢查了ModelState對象,它有所有的屬性值(在所有情況下都是空字符串,因爲我試圖強制一個錯誤)。我應該在電子郵件地址上收到一個isRequired錯誤,我故意留空。
[HttpPost]
public ActionResult Create(YeagerTechWcfService.Customer cust)
{
if (ModelState.IsValid)
{
try
{
db.AddCustomer(cust);
TempData["ErrCode"] = "Customer successfully added.";
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
ViewData["ErrCode"] = "CustErr";
ViewBag.Error = ex.Message;
return View();
}
}
else
return View();
}
你在用什麼界面? Silverlight的? WPF? –
ASP.Net with MVC 3 – sagesky36
您是否在使用'ModelState.IsValid'提交模型時檢查模型的狀態? –