開發Web應用程式時,利用 EntityFramework來處理資料,利用 EF精靈建立了 UserDataModel.edmx (同時產生 UserDataModel.Designer.cs)
namespace 為 MvcSSOPortal.Models.UserData
EF精靈建立的 class 不要手動更改,否則重整時,手動部分皆會遺失。
又想享用 .Net 3.5 SP1提供的Data Annotations 的用法。
因為初學,想說從網路找個範例參考,就直接複製別人的源碼,然後用文字編輯器將其存成 UserDataModel.Metadata.cs,並跟 UserDataModel.edmx放在相同資料夾下。
接著在 VS2008中將其加入至專案,並手動修改 UserDataModel.Metadata.cs 如下(省略 using ...部分)
namespace MvcSSOPortal.Models.UserData
{
[MetadataType(typeof(aspnet_Roles_MetaData))]
public partial class aspnet_Roles
{
}
public class aspnet_Roles_MetaData
{
//[Required(AllowEmptyStrings = false, ErrorMessage = "{0} 为必填字段")]
//[NameValidation(ErrorMessage = "{0} 只能是數字")]
//[System.Web.Mvc.HiddenInput(DisplayValue = true)]
//public object ApplicationId { get; set; }
[System.Web.Mvc.HiddenInput(DisplayValue = true)]
public object RoleId { get; set; }
//[Required]
[DataType(DataType.Text)]
[DisplayName("角色:")]
public object RoleName { get; set; }
//[Required]
[DataType(DataType.Text)]
[DisplayName("系統名稱:")]
public object SysName { get; set; }
//[Required]
[DataType(DataType.Text)]
[DisplayName("網址:")]
public object URL { get; set; }
//[Required]
[DataType(DataType.Text)]
[DisplayName("說明:")]
public object Description { get; set; }
}
public class NameValidationAttribute : RegularExpressionAttribute
{
NameValidationAttribute()
: base("^[0-9]*$")
{}
}
}
編譯時,並無錯誤,可是執行時卻沒有 Annotation 的效果,利用類別檢視器,查看也不見
NameValidationAttribute 此類別的存在,表示此檔案並未被編譯到(奇怪~~~)
後來將其重新命名,並自專案中移除!
另於 UserDataModel.edmx 的資料夾內利用精靈新增類別,由VS2008自動產生 UserDataModel.Metadata.cs
再從利用Notepad開啟之前被重新命名的檔案,將上面之程式碼複制,於VS2008中貼到UserDataModel.Metadata.cs,內容與上面程式面並無不同。
重新編譯、執行-->哈!哈! OK 啦!
利用類別檢視器也看到 NameValidationAttribute 此類別了!
為什麼會這樣??? 我也不知道,這是我試了好多方法之後找到的結果!
(之前手動建立的UserDataModel.Metadata.cs ,我試著:
變更 namespace
變更 public partial class aspnet_Roles (把 partial 拿掉、把aspnet_Roles更名)
變更 所在的資料夾(移到 Controllers、移到 App_code)
試著指定 aspnet_Roles 的繼承來源
可是編譯都沒有錯誤,但依舊沒有差別~~~無作用
)
沒有留言:
張貼留言