程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> XAF應用開發教程(五)驗證模塊,xaf應用開發

XAF應用開發教程(五)驗證模塊,xaf應用開發

編輯:C#入門知識

XAF應用開發教程(五)驗證模塊,xaf應用開發


數據驗證是應用程序開發中使用頻率最高的功能模塊,本節詳細介紹一下XAF中如何使用驗證模塊。

XAF 驗證模塊內置了下面的一些驗證規則:

驗證規則類型

說明

RuleCombinationOfPropertiesIsUnique (RuleCombinationOfPropertiesIsUniqueAttribute) 要求多個屬性的值組合在一起時是唯一的. RuleCriteria (RuleCriteriaAttribute) 要求滿足指定的條件. 如:座機或手機必須填寫一個。 條件為:坐機 is not null or 手機 is not null RuleFromBoolProperty (RuleFromBoolPropertyAttribute) 要求指定的boolean類型的屬性的值必須為真.比如注冊用戶時必須選中同意一系列的條款。 RuleIsReferenced (RuleIsReferencedAttribute) 要求必須被引用的. RuleObjectExists (RuleObjectExistsAttribute) 要求對象是必須存在的. RuleRange (RuleRangeAttribute) 要求值必須在一定的范圍內. RuleRegularExpression (RuleRegularExpressionAttribute) 要求輸入的值必須是滿足正則表達式的. RuleRequiredField (RuleRequiredFieldAttribute) 要求值是必填寫的. RuleStringComparison (RuleStringComparisonAttribute) 要求字符串必須符合某種比較的條件. RuleValueComparison (RuleValueComparisonAttribute) 要求值必須是符合某種比較條件. RuleUniqueValue (RuleUniqueValueAttribute) 要求值必須是唯一的.

 

為了更直觀的理解,我們先上一個效果圖。從必填驗證說起:

如上圖所示,在按下了保存、保存關閉、保存新建 按鈕之後,會出現一個錯誤提示信息。同時,在姓名文本框前面會出現一個紅色報錯的圖標。這個效是怎麼實現的呢?

 public class 客戶........

....................
private string _姓名; [RuleRequiredField(CustomMessageTemplate ="請填寫姓名!")] public string 姓名 { get { return _姓名; } set { SetPropertyValue("姓名", ref _姓名, value); } }
...................

我在前面使用的項目中,打開了客戶.cs文件,並在客戶類的姓名屬性上增加了一行

[RuleRequiredField(CustomMessageTemplate ="請填寫姓名!")]
是的只需要這樣一行就可以了。

這樣,XAF為我們生成了一條驗證規則,規則的名稱是自動指定的,一系列相關的也都用了默認值,我們修改一下代碼,指定下名稱:

[RuleRequiredField("客戶姓名必填", DefaultContexts.Save,CustomMessageTemplate ="請填寫姓名!")]

第一個參數為規則的名稱,DefaultContexts.Save是指在保存這個上下文時才執行驗證。

編譯後,打開xafml文件,可以看到這麼規則的所有信息:

按照左側紅框中的路徑,最終點擊結點“客戶姓名必填”後,右側出現了此規則的詳細信息,其中格式這一分組內的設置都是顯示消息類的。可以進行一下漢化。

帶有地球圖標的,都是需要本地化的屬性。

行為一欄中:

InvertResult:反轉結果,當設置為True時,即驗證的結果如果是沒通過,則認為通過,即是否通過的結果取反,這個選項在必填驗證是沒什麼用的,我們不可能做一個驗證規則要實現某些屬性必須不能填值的。

ResultType:Error,Warning,Information三種,其中:

Error:當不滿足驗證規則時,報個錯誤出來,並且不能繼續操作程序。上面演示的驗證規則就是這樣效果了。

Warning:當不滿足驗證規則時,顯示一個警告信息,確認後,繼續程序運行。

比如:客戶信息中有個地址屬性,當然我們是希望填寫地址的,如果不填寫,有市場活動舉行時,我們有一些禮品就沒辦法寄送給客戶。此時,我們可以增加一條這樣的規則,但如果確定得不到地址,也只能不填寫了,但要提示操作人員。

按下保存時,可以看到地址文本框前面出現了一個黃色感歎號圖標。在錯誤信息提示的位置,出現了一個checkbox,文字是Ignore warnings,當選中了checkbox後,再次按保存時,則不在提示此信息了。

下面我們再來看看將ResultType修改為Information時的效果:

代碼:

 private string _地址;
        [RuleRequiredField(ResultType = ValidationResultType.Warning,CustomMessageTemplate ="如果不填寫地址,市場活動禮品將無法送達,確認不填寫嗎?")]
        public string 地址{
            get { return _地址; }
            set { SetPropertyValue("地址", ref _地址, value); }
        }

 

由於姓名沒有填寫,觸發了必填規則,同時顯示出了地址的信息,但可以不去糾正,只是顯示出信息。

當,姓名填寫了時,地址的消息是不會顯示的,此時,點擊Validation按鈕會看到提示信息:

        private string _地址;
       [RuleRequiredField(ResultType = ValidationResultType.Information,CustomMessageTemplate ="如果不填寫地址,市場活動禮品將無法送達,確認不填寫嗎?")]
        public string 地址{
            get { return _地址; }
            set { SetPropertyValue("地址", ref _地址, value); }
        }

接下來看xafml中規則的 SkipNullOrEmptyValues,這個選項在必填驗證時沒有意義,但在別的規則中是有意義的,比如:地址必須以“上海市”開頭,如果沒有填寫則不驗證,那麼把此值設置成True即可。

代碼:

 private string _地址;
        [RuleRequiredField(ResultType = ValidationResultType.Information,CustomMessageTemplate ="如果不填寫地址,市場活動禮品將無法送達,確認不填寫嗎?")]
        [RuleStringComparison("地址必須開始於上海市", DefaultContexts.Save, StringComparisonType.StartsWith,"上海市",SkipNullOrEmptyValues =true)]
        public string 地址{
            get { return _地址; }
            set { SetPropertyValue("地址", ref _地址, value); }
        }

如果沒有填寫地址時,規則並不會生效。保存是直接通過的,這就是SkipNullOrEmptyValues的作用。

TargetContextIDs:這個屬性是個字會串,可以隨意填寫。首先來看一下什麼是Context,即上下文:

上下文是指讓驗證規則生效的一個環境,比如保存數據時,審核數據時,刪除數據時,入庫時,等等 ,但系統其實只提供了兩個默認的上下文環境,我們前面使用了

DefaultContexts.Save 這個枚舉,可以看他的定義(我使用的是Reflector查看的):
[Flags]
public enum DefaultContexts
{
    Delete = 2,
    Save = 1
}

可以看到這個枚舉是Flags,也就是說,多個值是可以同時使用的。只定義了刪除、保存。

系統內置的上下文環境只有這兩種,當然我們可以定義自己的上下文環境,請看下一節中的自定義上下文。

 我們可以看到在xafml的規則中,有很多的屬性,其實在代碼中這些屬性都是可以控制的,在書寫Attribute時,我們可以利用VS的智能感知,查看有哪些參數可以設置,對照著XAFML中的信息,就能知道功能了。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved