asp.net mvc3 數據驗證(四)—Remote驗證的一個注意事項


        前幾篇把asp.net mvc3 中基於Model的主要數據驗證的方法都已經講完了,本節純粹只是講一個我曾經遇到的問題,因為和數據驗證相關,所以就放在了這系列的文章中。
        經過前幾篇文章的分享,大家應該覺得asp.net 自帶的Remote遠程數據注解比較好用,但是我在實際使用中卻遇到了問題。
        首先,一般來說對於一個屬性的驗證可能需要不止一個的遠程驗證,比如對於用戶名來說,我們需要對於它的長度做一些限制,這個可以通過StringLength特性來解決;同時還需要驗證用戶名不能重復,這個就需要通過Remote特性來解決。
        現在需要再添加一個驗證,那就是用戶名不能包含違禁詞。比如......(比較敏感,就不寫了。。。^_^),違禁詞保存在數據庫中。剛開始我覺得這個也簡單,再加個Remote驗證不就解決了么。。。童鞋們,有時候我們覺得很簡單就能辦到的事情,如果不做,永遠不知道你能不能辦到。所以建議大家,遇到事情不要拖拉,盡快做好。
        噼里啪啦,很快就把驗證的方法寫好了,然后加到Model中一看傻眼了。。。
        原來不支持同一個屬性有兩個Remote驗證。。。
 
        這個時候該怎么辦呢,嘗試將兩個驗證寫在同一個Remote中,但是這樣的話只能顯示一個ErrorMessage,被否決。(但是的我以為Remote特性的方法只能返回一個bool值,不能返回ErrorMessage)。
        然后我就在cnblogs、csdn以及百度知道發帖詢問,大多數的回答沒有說到重點。
 
        由於時間緊(也不是因為時間緊,總不能讓這么一個小驗證跟經理說搞個一整天吧),所以就自己寫了個自定義驗證解決。
        事情雖然是解決了,但是總覺得微軟設計的時候總不會這么傻叉,連這點都沒想到。但是查資料也沒查到啥,之后就一直放着。
 
        直到昨天,csdn上的一哥們說Remote驗證可以自定義ErrorMessage,我才恍然大悟,我原來一直以為只能返回true或false的。
        接下來就很簡單了,花了5分鍾的時間找到了返回ErrorMessage的方法,原來驗證為false時不用返回bool值,可以直接返回ErrorMessage。方法如下:
        public JsonResult CheckUserName(string userName)
        {
            if (IsUniqueName(userName) && IsForbiddenName(userName))
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
            else if (!IsUniqueName(userName))
            {
                return Json("用戶名不唯一!", JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json("用戶名不包含違禁詞!", JsonRequestBehavior.AllowGet);
            }
        }

 

        這樣就可以完美解決需要多個Remote驗證的問題了。
        雖然問題解決了,但是仍然要吐槽下微軟,干嘛不能多個Remote驗證,吧這么多的邏輯都放在一個方法中容易繞暈額。。。
 
        雖然這是個小問題,但是從中至少得到了兩點啟示:
            1、看到的問題不可怕,可怕的是有問題但是我們沒有看到;
            2、很多事情,只要你堅持,總會等到柳暗花明的一天。
 
  asp.net mvc3 數據驗證的前幾篇文章: asp.net mvc3 的數據驗證(一)
                     asp.net mvc3 數據驗證(二)——錯誤信息的自定義及其本地化
                     asp.net mvc3 數據驗證(三)—自定義數據注解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM