雖然已經可以添加商品分類,但還需進行優化,比如:用戶是否輸入、輸入字符串是否有格式限制等等。
打開添加分類按鈕,名稱不輸入任何字符,直接保存,會發現列表添加一條空記錄。在實際項目中,這是不允許出現的事情,我必須對分類名稱進行必填限制,但用戶沒填寫時,給予提示信息。
數據驗證就涉及客戶端和服務端,建議兩端都實現,保存安全性。
客戶端驗證
首先,來實現客戶端驗證
1.打開視圖_CreateModal.cshtml
【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\Category\_CreateModal.cshtml】
在input中修改如下代碼:
<input class="form-control" type="text" name="Name" required>
2.打開_CreateModal.js
【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\Category\_CreateModal.js】
在this.save中添加如下代碼:
this.save = function () { //驗證不通過返回 if (!_$categoryForm.valid()) { return; }
3.測試
保存文件,現在點擊添加分類按鈕,不輸入任何字符,效果如下:

鼠標點擊Input框

服務端驗證
現在客戶端已經實現了必填驗證,雖然不影響使用,但不排序一些人不按套路出牌,他們可以繞過客戶端驗證,直接提交表單,這里不多解釋。總之服務端驗證也必須完善,接下來實現服務端驗證。
1.加注解
服務端驗證實現也比較簡單,打開CreateCategoryInput.cs【..\MyCompanyName.AbpZeroTemplate.Application\CategoryApp\Dto\CreateCategoryInput.cs】
添加如下代碼:
[Required] public string Name { get; set; }
2.取消客戶端驗證
為了驗證服務端是否生效,這里把客戶端驗證取消,打開文件_CreateModal.js【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\Category\_CreateModal.js】
修改this.save,把表單驗證代碼備注掉
//if (!_$categoryForm.valid()) { // return; //}
3.驗證
生成項目,刷新頁面,再點擊添加分類按鈕,直接點保存,如下圖:

這樣服務端驗證已經生效,至此已經實現添加分類的數據驗證功能。然而功能還沒完成,接下來實現分類名稱唯一性,就是說分類名稱不可重復。
4.打開文件
CategoryAppService.cs【..\MyCompanyName.AbpZeroTemplate.Application\CategoryApp\CategoryAppService.cs】
修改CreateCategory方法為如下:
public void CreateCategory(CreateCategoryInput input) { int count=_categoryRepository.Count(a => a.Name.Equals(input.Name)); if (count > 0) { throw new UserFriendlyException("分類名稱已存在!"); } _categoryRepository.Insert(new Category() { Name = input.Name }); }
5.測試
生成項目,刷新頁面,點擊添加分類按鈕,輸入一個已存在的分類,如下提示:

現在添加分類功能算是完全完成了。下一篇分類編輯