MVC2 Entity Framework 4 中 REQUIRED 字元串屬性的伺服器端驗證不起作用
我正在嘗試讓實體框架字元串屬性的伺服器端驗證正常工作。其他伺服器端驗證(例如數據類型驗證和所需的 dateTime 和數字 EF 屬性)正在執行。
這在 VS 2010、.Net 4.0、MVC2 + Cloud、ADO.Net 實體框架中。
我遇到問題的字元串屬性映射到 SQL 2008 Varchar(50) 不可為空的列。
當我嘗試使用此屬性的空字元串發佈到我的創建操作時,我收到以下錯誤。
異常詳細資訊:System.Data.ConstraintException:此屬性不能設置為空值。
當我發佈到帶有空格的操作時,我成功地獲得了必填欄位驗證消息。
我曾嘗試使用數據註釋和 ClientSideValidation,但 ClientSideValidation 在部分視圖和 jquery 對話框上工作似乎存在問題。
這是來自實體框架的原始自動生成程式碼。
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] [DataMemberAttribute()] public global::System.String GradeTypeName { get { return GradeTypeName; } set { OnGradeTypeNameChanging(value); ReportPropertyChanging("GradeTypeName"); _GradeTypeName = StructuralObject.SetValidValue(value, false); ReportPropertyChanged("GradeTypeName"); OnGradeTypeNameChanged(); } }根據 Action 方法的簽名(CREATE 或 EDIT),異常可能在進入方法之前或在呼叫 UpdateModel() 時在方法內發生。內部異常位於 model.designer.cs 文件的下一行。
_GradeTypeName = StructuralObject.SetValidValue(value, false);我已經能夠在一個簡單的 mvc2 Web 應用程序上重現這一點。
我有一段時間遇到同樣的問題。我在這裡找到了一段解釋:http: //mvcmusicstore.codeplex.com/workitem/6604。簡而言之,Entity的Property Validation拋出異常“ System.Data.ConstraintException: This property cannot be set to a null value ”。當您的 mvc 應用程序嘗試將表單欄位綁定到相應的實體屬性時執行此驗證(它稱為PreBinding Validation,它在送出表單時發生)。由於該欄位為空(因此轉換為 null),綁定程序嘗試將 null 值綁定到屬性,這違反了實體屬性的 Non-Null 約束。
但是,如果您發布一個空白欄位(與空欄位不同,因此為空)實體驗證通過(因為該屬性不再設置為空值),然後您會看到來自“必需”註釋驗證的消息,即在預綁定之後執行(它是PostBinding Validation)。
一種解決方法是使用註釋**$$ DisplayFormat(ConvertEmptyStringToNull = false) $$**這告訴活頁夾不要將空字元串轉換為 null。
[Required] [DisplayFormat(ConvertEmptyStringToNull = false)] public string YourStringProperty { get; set;}希望這可以幫助!