Welcome to Galaxy Software Services Corporation !
徵才專區
Vital CRM 國際認證
GSS部落格
叡揚資訊
關於叡揚
新聞與活動
產品與服務
叡揚e論壇
投資人關係
ESG專區
EN
中
簡
日
搜尋
關於叡揚
叡揚簡介
創辦人的話
叡揚大事紀
得獎肯定
合作夥伴
營業據點
聯絡我們
新聞與活動
新聞中心
資安電子報
影音專區
成功案例
行銷活動
產品與服務
企業e化應用軟體
S.P.E.E.D. 公文線上簽核管理系統
Radar 睿達人力資源管理系統
iota C.ai 對話服務平台
Tracko 多源智慧追蹤平台
B.E.S.T. 銀行信用風險資訊解決方案
BoDms 董事會提案暨會務管理系統
Vitals ESP 企業知識協作平台
Vitals HCA 評鑑協同管理系統
Vitals HAS 醫療數據分析系統
Vitals KPIM 指標管理系統
Openfind 網擎訊息安全解決方案
資訊安全
資訊安全全系列產品
行動應用程式安全專區
Checkmarx 源碼安全檢測
Digital.ai APP & Web 防護
Digital.ai APP & Web 相容性功能驗測
Illumio 零信任網路微分段
Orca Security 雲端原生應用程式防護平台
Azul 安全高效 Java JDK
Mend.io Open Source 檢測
HCL 網頁應用程式弱點掃描軟體
Quokka APP 黑箱檢測
Secure Code Warrior 安全開發培訓平台
資安檢測服務
資安學程
資安白皮書
資安電子報
企業數位化智慧維運
企業數位化智慧維運
Axway API 管理平台
Axway ST 集中檔案傳輸管理
AVC 應用程式弱點整合平台
BMC Control-M 批次管理解決方案
BMC Helix Discovery & AISM 探索打造企業IT智慧管理平台
Dynatrace AI智慧維運與效能管理
DMP 數據治理平台
Rocket® Data Intelligence 數據血緣平台
Akamai API Security 安全平台
Servicenow ITSM一站式IT服務管理平台
TIBCO 智能化資料平台
RPA 機器人流程自動化
Automation Anywhere 業務流程自動化RPA平台
UiPath 機器人流程自動化平台
Woodpecker XVR 次世代資安可視性解決方案
資源中心
雲端與大數據服務
Vital NetZero 零碳雲
Vital CMP 驗證管理
Vital CRM 客戶關係管理
Vital BizForm 雲端智慧表單
Vital Knowledge 協同知識管理
Vital Finance 財務會計管理
Vital OD 雲端公文管理
Vital HCM 雲端人力資源管理
大數據分析解決方案
運帷服務
資訊系統維運與開發服務
QuEye CIA 軟體變更衝擊分析器
AI 解決方案
AI 解決方案介紹
AI 財務報表辨識系統
AI 智慧公文解決方案
AI 知識管理智能生成
政府共同供應契約
ESG解決方案
叡揚e論壇
叡揚e論壇
叡揚真心話
投資人關係
股東專區
重大訊息
主要股東
股東會
歷年股利
股利政策
法人說明會
聯繫窗口
公開資訊觀測站
公司治理
營運團隊
公司治理
董事會
功能性委員會
誠信經營
風險管理
智慧財產管理計畫
利害關係人與溝通
公司重要內規
ESG專區
財務資訊
每月營收資訊
財務報告
ESG專區
EN
中
簡
日
搜尋
徵才專區
Vital CRM 國際認證
GSS部落格
選單
首頁
分類
標籤
選擇分類
園丁來閒聊
工具平台
專案管理
資料庫
經驗分享
測試
設計
效能調校
程式語言
|_
.NET MVC
|_
.NET
|_
Java
|_
C#
|_
Python
|_
TypeScript
|_
VB.NET
園丁
資訊安全
開發工法
作業系統
前端
搜尋
訂閱文章
取消訂閱文章
設置
登入
帳號
密碼
記住我
登入
忘記帳號
重置密碼
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間
(634 個字)
字體大小:
+
–
訂閱
取消訂閱
Asp.Net MVC Model Validation:Custom Validation - 以 Required If 為例
經驗分享
程式語言
.NET MVC
2018/06/19, 週二
2800 點擊
0 評論
在前篇「
Asp.Net MVC Model Validation:Remote validation
」的介紹之下,想必大家對於 .Net MVC 的 Model Validation 運作機制都有一定程度的了解,接下來將進一步
介紹如何在 .Net MVC Model Validation 的運作機制加上自訂驗證規則(
前、後端
)
,使我們專案的表單驗證機制更加完善
。
自訂驗證規則的實作要素分為
後端
及
前端
,以下將以 RequiredIf 的使用情境來說明:
後端
自訂一個 Validation Attribute 類別(
RequiredIfAttribute.cs
),並:
繼承 ValidationAttribute 類別後覆寫 IsValid 方法來加入自訂驗證規則:後端 ModelState.IsValid 所觸發的驗證方法。
繼承 IClientValidatable 類別後實作 GetClientValidationRules 方法:當 .Net MVC framework 運作時,會透過此 interface 找到有實作的類別來取得 validation object,再透過 GetClientValidationRules 檢索及發送相關的 metadata 或 rules 至前端。
(貼心小叮嚀:要提供前端驗證時,一定要實作此步驟)
[source language="csharp"]
public class RequiredIfAttribute : ValidationAttribute, IClientValidatable
{
private String PropertyName { get; set; }
private Object DesiredValue { get; set; }
private readonly RequiredAttribute _innerAttribute;
public RequiredIfAttribute(String propertyName, Object desiredvalue)
{
PropertyName = propertyName;
DesiredValue = desiredvalue;
_innerAttribute = new RequiredAttribute();
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var dependentValue = validationContext.ObjectInstance.GetType().GetProperty(PropertyName).GetValue(validationContext.ObjectInstance, null);
if (dependentValue != null && dependentValue.ToString() == DesiredValue.ToString() && !_innerAttribute.IsValid(value))
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName), new[] { validationContext.MemberName });
}
return ValidationResult.Success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = string.Format("{0} 欄位是必要項。", metadata.GetDisplayName()),
ValidationType = "requiredif",
};
rule.ValidationParameters["dependentproperty"] = PropertyName;
rule.ValidationParameters["desiredvalue"] = DesiredValue is bool ? DesiredValue.ToString().ToLowerInvariant() : DesiredValue;
yield return rule;
}
}
[/source]
前端
建立一個 JS 檔案(
jquery.requiredIfValidator.js
),並:
透過 $.validator.unobtrusive.adapters.add 來定義自訂驗證規則的 Html 語法及額外(含參數)的設定程序。
透過 $.validator.addMethod 加入自訂驗證規則:為前端 $('form').valid() 所觸發的驗證方法。
(貼心小叮嚀:如果僅需實作純前端驗證,實作此步驟即可完成)
[source language="js"]
// 將 Html 相關語法及參數的設定透過 unobtrusive adapters 新增進 jQuery validator
$.validator.unobtrusive.adapters.add('requiredif', ['dependentproperty', 'desiredvalue'], function (options) {
options.rules['requiredif'] = options.params;
options.messages['requiredif'] = options.message;
});
$(document).ready(function () {
// 註冊 jQuery validator 的 requiredif 自訂規則驗證方法
$.validator.addMethod('requiredif', function (value, element, parameters) {
var desiredvalue = parameters.desiredvalue;
desiredvalue = (desiredvalue == null ? '' : desiredvalue).toString();
var controlType = $("input[name$='" + parameters.dependentproperty + "']").attr("type");
var actualvalue = {}
if (controlType == "checkbox" || controlType == "radio") {
var control = $("input[name$='" + parameters.dependentproperty + "']:checked");
actualvalue = control.val();
} else {
actualvalue = $("#" + parameters.dependentproperty).val();
}
if ($.trim(desiredvalue).toLowerCase() === $.trim(actualvalue).toLocaleLowerCase()) {
var isValid = $.validator.methods.required.call(this, value, element, parameters);
return isValid;
}
return true;
});
});
[/source]
結果展示(DEMO)
將 Model 中需要驗證的 Property 掛上 DataAnnotation:RequiredIf 即完成設定與實作:
希望透過以上的介紹,
對大家往後實作 .Net MVC Model Validation 自訂驗證規則能有所幫助。
你覺得這篇文章怎麽樣?
開心
(
0
)
喜愛
(
0
)
驚奇
(
0
)
悲傷
(
0
)
生氣
(
0
)
標籤:
Asp.Net MVC
Custom Validation
Model Validation
IBotDataStore.FlushAsync Exception: The data is ch...
RxJS observable V.S Mobx observable
相關文章
Model Validation:進階應用的遠端 API 驗證(Remote validation)
.NET MVC
初探 ASP.NET MVC 多國語系(i18n)|#1: 觀念與基本做法
.NET MVC
[Asp .Net MVC] ViewMode vs DTO(Data Transfer Object)
設計
ASP.NET Session
經驗分享
透過 Asp.Net MVC Filter 實作 Controller 層級的 Action Logging 機制
.NET
【Asp.Net MVC】使用 ContextBoundObject 搭配 Attribute 實現 BLL 層及 DAL 層的 AOP Logging 機制
.NET
評論
尚無評論
已經注冊了?
這裡登入
Guest
2025/04/25, 週五
Captcha 圖像
提交您的評論