MVC4 數據驗證、特性、自動屬性總結

来源:http://www.cnblogs.com/chenwolong/archive/2016/11/14/Attributter.html
-Advertisement-
Play Games

最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。 十年河東十年河西,莫欺少年窮 學無止境,精益求精 最近在做自學MVC,遇到的問題很多,索性一點點總結下。 MVC4數據驗證: 本例以程式為例就行說明: MVC特性,本篇主要講解:Exclude、Includ ...


   最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。

   十年河東十年河西,莫欺少年窮

   學無止境,精益求精

   最近在做自學MVC,遇到的問題很多,索性一點點總結下。

   MVC4數據驗證:

   本例以程式為例就行說明:

public class MyModel
    {
        [Required(ErrorMessage = "請輸入收件人姓名")]
        public string Uname { get; set; }

        [Required(ErrorMessage = "請輸入收貨人手機號")]
        [RegularExpression(@"^1[3458][0-9]{9}$", ErrorMessage = "手機號格式不正確")]
        public string UMoblie { get; set; }

        [Required(ErrorMessage = "請選擇所屬省份")]
        public string cmbProvince { get; set; }

        [Required(ErrorMessage = "請選擇所屬市/縣")]
        public string cmbCity { get; set; }

        [Required(ErrorMessage = "請選擇所屬區域")]
        public string cmbArea { get; set; }

        public int moren { get; set; }
        public string postnum { get; set; }

        [Required(ErrorMessage = "請填寫詳細地址")]
        public string AddressInfo { get; set; }

        [RegularExpression(@"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$", ErrorMessage = "請輸入正確的電子郵箱地址")]
        public string Email { get; set; }

        [StringLength(18, ErrorMessage = "身份證格式不正確!")]
        public string cardNum { get; set; }//中國身份證號 18位

        [StringLength(16, MinimumLength = 6, ErrorMessage = "密碼長度應在6~18位之間")]
        [System.Web.Mvc.Compare("ConfimPassWords")]//二次輸入密碼必須和上次相同
        public string NewPassWords { get; set; }//密碼長度 6~16位

        [DataType(DataType.Password)]
        [StringLength(16, MinimumLength = 6, ErrorMessage = "密碼長度應在6~18位之間")]
        [System.Web.Mvc.Compare("NewPassWords")]//二次輸入密碼必須和上次相同
        public string ConfimPassWords { get; set; }//密碼長度 6~16位 

        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
        public decimal money { get; set; }// DisplayFormat特性可以用來處理屬性的各種格式化選項。當屬性包含空值時,可以提供可選的顯示文本,也可以為包含標記的屬性關閉HTML編碼,還可以為運行時指定一個應用於屬性值的格式化字元串。

        [ReadOnly(true)]
        public decimal Price { get; set; }//表示只讀的 不可修改

        [Range(18, 60)]
        public int Age { get; set; }//年齡範圍

        // order 控制欄位屬性的順序
        [Required]
        [StringLength(160)]
        [Display(Name = "Last Name", Order = 15001)]
        public string LastName { get; set; }
        [Required]
        [StringLength(160, MinimumLength = 3)]
        [Display(Name = "First Name", Order = 15000)]
        public string FirstName { get; set; }
}

   MVC特性,本篇主要講解:Exclude、Include、Remote、HandleError、HiddenInput

   表單提交中,如果我們不想提交某些屬性,我們可以使用Exclude特性來聲明

   表單提交中,如果我們僅僅只提交某些屬性,我們可以使用Include特性來聲明

   例如我們有如下Model

[Bind(Exclude="Address")]//在類上邊進行聲明,則針對所有引用該類的Action方法有效
   public class Employee
   {
       public string Name { get; set; }
       public string Email { get; set; }
       public string Address { get; set; }
       public string PhoneNo { get; set; }
   }

   提交表單時,我們不提交Address,那麼在Action方法中,我們獲取不到Address的值,如下所示:

   

   當然,如果我們不是針對所有方法,而是僅僅針對一個方法,那麼我們可以將特性寫在方法上,如下所示:

   

   除了上述:[Bind(Exclude="Address")]進行聲明,我們也可以使用Include進行聲明:

 [Bind(Include = "Name,Email,PhoneNo")]//在類上邊進行聲明,則針對所有引用該類的Action方法有效
    public class Employee
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public string Address { get; set; }
        public string PhoneNo { get; set; }
    }

   Remote特性講解

   假設我們有一個註冊表單,裡面有郵箱文本框,當輸入郵箱後,我們想檢查輸入的郵箱是否在資料庫中已經存在,如果存在,則不提交表單,這時我們可以使用RemoteAttribute,通過RemoteAttribute,我們可以在不用提交表單就可以先進行一些服務端驗證。

   我們可以在下麵的例子中使用RemoteAttribute:

[Required]
[Remote("CheckUserName", "Home")]
public string UserName
{
get;
set;
}

   RemoteAttribute的第一個參數是一個Action名字,第二個是Controller名字,第三個是如果郵箱已存在後顯示給用戶看的提示信息。當我們輸入完郵箱後,CheckEmail方法將被執行並檢查郵箱是否存在。

public JsonResult CheckUserName(string UserName)
        {
            bool result = true;
            if (UserName == "admin")
            {
                result = false;
            }
            return Json(result,JsonRequestBehavior.AllowGet);
        }

   HandleError講解如下:

   我們已經有很多方法在MVC中處理異常,比如用try catch,或者使用Filter,或者通過第三方庫比如elmah。但是MVC也提供了一個HandleErrorAttribute去處理異常,如下:

複製代碼
[HandleError()]
public ActionResult CheckError()
  {
     int a = 10;
     int b = 0;
     int k = a / b;
     return View();
  }
複製代碼

   在web.config文件中,我們添加如下兩行:

<customErrors mode ="On" defaultRedirect ="Error.cshtml">
</customErrors>

   在shared文件夾下創建一個視圖Error.cshtml,然後運行程式,如果運行上面的CheckError()方法,你剛創建的Error.cshtml將會顯示出來。

   我們也可以使用HandleErrorAttribute給不同類型的異常顯示不同的視圖頁面。

複製代碼
[HandleError(ExceptionType=typeof(DivideByZeroException),View="DivideByZeroErrorView")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "NullRefrenceErrorView")]
public ActionResult CheckError()
       {
           int a = 10;
           int b = 0;
           int k = a / b;
           return View();
       }
複製代碼

   HiddenInput Attribute

   如果我們想對用戶隱藏一些實體欄位,我們可以使用HiddenInput特性。

複製代碼
public class Employee
    {
        [HiddenInput(DisplayValue=false)]
        public string Name { get; set; }
        [Remote("CheckEmail","Employee",ErrorMessage="Email is already exist")]
        public string Email { get; set; }
        public string Address { get; set; }
        public string PhoneNo { get; set; }
    }
複製代碼

   在以上的實體中,我用HiddenInput特性去描述Name欄位。這樣程式運行後在瀏覽器中Name欄位將不在顯示。因此HiddenInput給我們d 在實體欄位上多了一些額外的控制。

   C# 自動屬性:

   在 C# 3.0 和更高版本中,當屬性的訪問器中不需要其他邏輯時,自動實現的屬性可使屬性聲明更加簡潔。

   下麵示例演示了屬性的標準實現和自動實現:

class Program {
    class Person {
        //標準實現的屬性
        int _age;
        public int Age {
            get { return _age; }
            set {
                if (value < 0 || value > 130) {
                    Console.WriteLine("設置的年齡有誤!");
                    return;
                }
                _age = value;
            }
        }

        //自動實現的屬性
        public string Name { get; set; }
    }
        
    static void Main(string[] args) {
        Person p = new Person();
        p.Age = 180;
        p.Name = "小王";
        Console.WriteLine("{0}今年{1}歲。",p.Name,p.Age);
        Console.ReadKey();
    }
}

   上面的自動屬性是控制年齡的範圍,很簡單!

   再如我寫的自動截取字元串長度的屬性

 /// <summary>
    /// 積分榜
    /// </summary>
    public partial class YX_weiUserJF
    {
        private string nickName;

        public string NickName
        {
            get { return nickName; }
            set
            {
                nickName = value;
                if (CommonMethod.GetStringLenth(nickName) > 16)
                {
                    //當昵稱長度大於16位時,進行截取前兩位+ ... +後兩位
                     nickName = nickName.Substring(0, 2) + "..." + nickName.Substring(nickName.Length - 2, 2);
                }
            }
        }
        private int score;
        public int  Score
        {
            get { return score; }
            set
            {
                score = value;
            }
        }
      
    }

   好了,就這麼多,很簡單吧!

   參考:MVC常用特性使用

   @陳卧龍的博客


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2016年9月20日至2016年11月12日,從學校圖書館借來的《明解c語言》看完了。 大三第一個學期,前8周,有c語言程式設計的課。課本是學校里的老師編寫出版的,為了壓縮空間,減少頁面,書中的代碼都擠成了一團,一點兒美感都沒有。課後習題的參考代碼輸入電腦後,運行錯誤,仔細看一遍,是最基本的邏輯問題 ...
  • 第一步:入口文件增加 第二步:修改config文件,我這裡路由模式設置為2 效果展示: ...
  • gvim的菜單亂碼解決方法: (亂碼是由於系統內碼不相容導致,系統內碼包括gb2312 gb18030 utf-8 utf-16[unicode]等) 生成文件 ~/.gvimrc 並添加如下語句:set encoding=chineseset langmenu=zh_CN.GBKset imcmd... ...
  • 第一次寫技術博客,還有些興奮呢。我是CrazyCatJack,大家可以叫我CCJ或者瘋貓。我即將成為一名嵌入式Linux的驅動工程師,現在還是一枚大四狗,呼呼~大學期間做了一些項目和比賽,都是基於32位的MCU(例如STM32、Freescale K60),這些呢都是根據網上的視頻,PDF自學的。現 ...
  • 來自:http://sspai.com/27403/ Finder 是 Mac 電腦的系統程式,有的功能類似 Windows 的資源管理器。它是我們打開 Mac 首先見到的「笑臉」,有了它,我們可以組織和使用 Mac 里的幾乎所有東西,包括應用程式、文件、文件夾、磁碟以及你網路上的共用磁碟,你同時可 ...
  • ipcs 1. 命令格式 ipcs [resource-option] [output-format] ipcs [resource-option] -i id 2. 命令功能 提供IPC設備的信息 3. 使用方法 resource選項: ipcs -m 查看系統共用記憶體信息 ipcs -q 查看系 ...
  • 1.命令格式 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 2. 命令功能 在文件目錄層級中查找文件並做相應的處理 3. 命令選項 -name finename 按照文件名查找文件,文件名可使用通配符 -per ...
  • 概述 ASP.NET Core 1.0是ASP.NET的一個重要的重新設計。 例如,在ASP.NET Core中,使用Middleware編寫請求管道。 ASP.NET Core中間件對HttpContext執行非同步邏輯,然後可選地調用序列中的下一個中間件或直接終止請求。 您通常通過在Configu... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...