程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 《ASP.NET MVC驗證框架中關於屬性標記的通用擴展方法》之繼續擴展

《ASP.NET MVC驗證框架中關於屬性標記的通用擴展方法》之繼續擴展

編輯:關於ASP.NET

首先需要對xVal有點熟悉:

http://www.codeplex.com/xval

建議下載最新源碼而不是編譯版本

再看兩篇文章:

http://goneale.com/2009/03/04/using-metadatatype-attribute-with-aspnet-mvc-xval- validation-framework/

深山老林將之翻譯為:《ASP.NET MVC驗證框架中關於屬性標記的通用擴展方法》

http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html

現在有個"比較驗證"的需求,比如注冊帳號時候,需要判斷兩次輸入的密碼是否一致,再比如有時候 需要比較輸入的值是否大於(小於)某個值或某個html控件的值等等。

而深山老林翻譯提供的方法並不支持這種方式,原因是是什麼呢?

進行比較時需要兩個屬性(或字段),ValidationAttribute如果用在某一個屬性上,無法獲取該屬性所 屬的實例,也就無法獲取另一個屬性值進行比較。(如果可以獲取還望一定告知)

因此,這裡就用基於類的特性校驗方式。

參考ASP.NET MVC 2 RC Demo 自定義類一個比較ValidationAttribute為StringCompareAttribute只是 簡單的比較連個字符串是否相等(完全有必要完善成類似於WebForm的CompareControl的效果):

1: [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited =  true)]
2: public class StringCompareAttribute : ValidationAttribute
3: {
4:    public string SourceProperty { get; private set; }
5:   public string  OriginalProperty { get; private set; }
6:
7:   private const string  _defaultErrorMessage = "'{0}' 與 '{1}' 不相等";
8:
9:   public  StringCompareAttribute(string sourceProperty, string originalProperty)
10:     :  base(_defaultErrorMessage)
11:   {
12:     SourceProperty =  sourceProperty;
13:     OriginalProperty = originalProperty;
15:   }
16:
17:   public override string FormatErrorMessage(string name)
18:    {
19:     return String.Format(CultureInfo.CurrentUICulture,  ErrorMessageString,
20:       SourceProperty, OriginalProperty);
21:   }
22:
23:   public override bool IsValid(object value)//value這裡就不是屬性或字 段的值了,而是實體的實例
24:   {
25:     PropertyDescriptorCollection  properties = TypeDescriptor.GetProperties(value);
26:     object sourceProperty  = properties.Find(SourceProperty, true /* ignoreCase */).GetValue(value);
27:      object originalProperty = properties.Find(OriginalProperty, true /* ignoreCase  */).GetValue(value);
28:
29:     return object.Equals(sourceProperty,  originalProperty);
30:   }
31:
32: }
33:

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