本文目錄
通過實例學習Fireasy開發(上篇)
通過實例學習Fireasy開發(中篇)
通過實例學習Fireasy開發(下篇)
通過實例學習Fireasy開發(補充/示例代碼下載)
前面的功能已經開發完成了,但是這里專門用一章來進行補充。
一、EasyUI驗證
不知道你有沒有發現,我們雖然在EmployeeMetada里加了驗證特性RequiredAttribute、StringLengthAttribute,但是頁面并沒有在data-options里生成validType。
在global.asax的application_Start方法里,加入以下的代碼:
PRotected void Application_Start(object sender, EventArgs e) { //資源打包配置 BundleHelper.Config(); //默認是使用MEF導出服務的,改成使用aspx對應的類文件作為服務 HttpConfiguration.Default.ServiceFactory = new AspPageServiceFactory(); //配置http服務的路由,依子目錄的級數而定 HttpConfiguration.MapHttpRoute("{service}.ajx/{action}"); HttpConfiguration.MapHttpRoute("{p1}/{service}.ajx/{action}"); HttpConfiguration.MapHttpRoute("{p1}/{p2}/{service}.ajx/{action}"); HttpConfiguration.MapHttpRoute("{p1}/{p2}/{p3}/{service}.ajx/{action}"); SettingsBindManager.RegisterBinder("validatebox", new ValidateBoxSettingBinder()); SettingsBindManager.RegisterBinder("numberbox", new NumberBoxSettingBinder()); }
為了達到效果,我們修改一下WebApplication1.Data項目下的EmployeeMetadata類(在Employee_Ex.cs文件內),為Mobile加上手機驗證,為Name、Post、Sex和Birthday加上必填驗證。
public class EmployeeMetadata { /// <summary> /// 屬性 Id 的驗證特性。 /// </summary> [Required] [StringLength(36)] public object Id { get; set; } /// <summary> /// 屬性 DeptId 的驗證特性。 /// </summary> [Required] [StringLength(36)] public object DeptId { get; set; } /// <summary> /// 屬性 No 的驗證特性。 /// </summary> [StringLength(20)] public object No { get; set; } /// <summary> /// 屬性 Sex 的驗證特性。 /// </summary> [Required] public object Sex { get; set; } /// <summary> /// 屬性 Name 的驗證特性。 /// </summary> [Required] [StringLength(20)] public object Name { get; set; } /// <summary> /// 屬性 Birthday 的驗證特性。 /// </summary> [Required] public object Birthday { get; set; } /// <summary> /// 屬性 Post 的驗證特性。 /// </summary> [Required] public object Post { get; set; } /// <summary> /// 屬性 Mobile 的驗證特性。 /// </summary> [Fireasy.Data.Validation.Mobile] [StringLength(20)] public object Mobile { get; set; } /// <summary> /// 屬性 Address 的驗證特性。 /// </summary> [StringLength(100)] public object Address { get; set; } /// <summary> /// 屬性 Description 的驗證特性。 /// </summary> [StringLength(500)] public object Description { get; set; } /// <summary> /// 屬性 State 的驗證特性。 /// </summary> public object State { get; set; } /// <summary> /// 屬性 DelFlag 的驗證特性。 /// </summary> public object DelFlag { get; set; } /// <summary> /// 屬性 Photo 的驗證特性。 /// </summary> [StringLength(200)] public object Photo { get; set; } }好了,我們現在來看看EmployeeEdit.aspx有表單有沒有加上數據驗證:

二、數據列表的排序
datagrid的columns中,我們默認生成了sortable屬性,但是后臺代碼中并沒有使用排序。其實代碼是生成了的,只需將注釋行Order(sorting)取消就要以了。
/// <summary> /// 根據查詢條件獲取員工。 /// </summary> /// <param name="deptNo">部門編碼。</param> /// <param name="startTime">開始日期。</param> /// <param name="endTime">結束時間。</param> /// <param name="post">崗位類別。</param> /// <param name="keyWord">關鍵字</param> /// <returns></returns> [ExceptionBehavior(true)] public object GetEmployees(string deptNo, DateTime? startTime, DateTime? endTime, PostKinds? post, string keyword) { var pager = EasyUIHelper.GetDataPager(); var sorting = EasyUIHelper.GetSorting(); using (var context = new DbContext()) { var list = context.Employees .Segment(pager) .OrderBy(sorting) .AssertWhere(!string.IsNullOrEmpty(deptNo), s => s.Dept.No.StartsWith(deptNo)) .AssertWhere(startTime != null, s => s.Birthday >= startTime.Value.StartOfDay()) .AssertWhere(endTime != null, s => s.Birthday <= endTime.Value.EndOfDay()) .AssertWhere(post != null, s => s.Post == post) .AssertWhere(!string.IsNullOrEmpty(keyword), s => s.Name.Contains(keyword)) .Select(s => new { s.Id, s.No, s.Name, Sex = ((Sex)s.Sex).GetDescription(), Post = s.Post.GetDescription(), s.Birthday, s.Mobile, s.Address, s.Description }) .ToList(); return EasyUIHelper.Transfer(pager, list); } }
但有一種情況,即沒有單擊列頭的情況下,默認使用某一屬性排序,比如按編碼降序排列,這時,Order方法可以這樣寫:
/// <summary> /// 根據查詢條件獲取員工。 /// </summary> /// <param name="deptNo">部門編碼。</param> /// <param name="startTime">開始日期。</param> /// <param name="endTime">結束時間。</param> /// <param name="post">崗位類別。</param> /// <param name="keyword">關鍵字</param> /// <returns></returns> [ExceptionBehavior(true)] public object GetEmployees(string deptNo, DateTime? startTime, DateTime? endTime, PostKinds? post, string keyword) { var pager = EasyUIHelper.GetDataPager(); var sorting = EasyUIHelper.GetSorting(); using (var context = new DbContext()) { var list = context.Employees .Segment(pager) .OrderBy(sorting, u => u.OrderByDescending(t => t.No)) .AssertWhere(!string.IsNullOrEmpty(deptNo), s => s.Dept.No.StartsWith(deptNo)) .AssertWhere(startTime != null, s => s.Birthday >= startTime.Value.StartOfDay()) .AssertWhere(endTime != null, s => s.Birthday <= endTime.Value.EndOfDay()) .AssertWhere(post != null, s => s.Post == post) .AssertWhere(!string.IsNullOrEmpty(keyword), s => s.Name.Contains(keyword)) .Select(s => new { s.Id, s.No, s.Name, Sex = ((Sex)s.Sex).GetDescription(), Post = s.Post.GetDescription(), s.Birthday, s.Mobile, s.Address, s.Description }) .ToList(); return EasyUIHelper.Transfer(pager, list); } }三、圖片上傳
員工表設計了一個照片的字段,但是之前我們并沒有用到它,現在我們就把照片上傳給加上。
首先,要引入上傳所需的js,只需要在BundleHelper.Render 后面再加上 upload 就可以了。
<%= BundleHelper.Render("base", "upload") %>接下來修改一下表單的table,加一個圖片和上傳圖片的鏈接:
<table class="form-body"> <tr> <td class="addon">部門</td> <td&
新聞熱點
疑難解答