国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

ASP.NET MVC的四種驗(yàn)證編程方式

2024-07-10 12:47:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們可以采用4種不同的編程模式來(lái)進(jìn)行針對(duì)綁定參數(shù)的驗(yàn)證。

一、手工驗(yàn)證綁定的參數(shù)

在定義具體Action方法的時(shí)候,對(duì)已經(jīng)成功綁定的參數(shù)實(shí)施手工驗(yàn)證無(wú)疑是一種最為直接的編程方式,接下來(lái)我們通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)演示如何將參數(shù)驗(yàn)證邏輯實(shí)現(xiàn)在對(duì)應(yīng)的Action方法中,并在沒(méi)有通過(guò)驗(yàn)證的情況下將錯(cuò)誤信息響應(yīng)給客戶端。我們?cè)谝粋€(gè)ASP.NET MVC應(yīng)用中定義了如下一個(gè)Person類作為被驗(yàn)證的數(shù)據(jù)類型,它的Name、Gender和Age三個(gè)屬性分別表示一個(gè)人的姓名、性別和年齡。

public class Person {   [DisplayName("姓名")]   public string Name { get; set; }    [DisplayName("性別")]   public string Gender { get; set; }    [DisplayName("年齡")]   public int? Age { get; set; } } 

接下來(lái)我們定義了如下一個(gè)HomeController。在針對(duì)GET請(qǐng)求的Action方法Index中,我們創(chuàng)建了一個(gè)Person對(duì)象并將其作為Model呈現(xiàn)在對(duì)應(yīng)的View中。另一個(gè)支持POST請(qǐng)求的Index方法具有一個(gè)Person類型的參數(shù),我們?cè)谠揂ction方法中先調(diào)用Validate方法對(duì)這個(gè)輸入?yún)?shù)實(shí)施驗(yàn)證。如果驗(yàn)證成功(ModeState.IsValid屬性返回True),我們返回一個(gè)內(nèi)容為“輸入數(shù)據(jù)通過(guò)驗(yàn)證”的ContentResult,否則將此參數(shù)作為Model呈現(xiàn)在對(duì)應(yīng)的View中。

public class HomeController : Controller {   [HttpGet]   public ActionResult Index()   {     return View(new Person());   }    [HttpPost]   public ActionResult Index(Person person)   {     Validate(person);      if (!ModelState.IsValid)     {       return View(person);     }     else     {       return Content("輸入數(shù)據(jù)通過(guò)驗(yàn)證");     }   }    private void Validate(Person person)   {     if (string.IsNullOrEmpty(person.Name))     {       ModelState.AddModelError("Name", "'Name'是必需字段");     }      if (string.IsNullOrEmpty(person.Gender))     {       ModelState.AddModelError("Gender", "'Gender'是必需字段");     }     else if (!new string[] { "M", "F" }.Any(       g => string.Compare(person.Gender, g, true) == 0))     {       ModelState.AddModelError("Gender",        "有效'Gender'必須是'M','F'之一");     }      if (null == person.Age)     {       ModelState.AddModelError("Age", "'Age'是必需字段");     }     else if (person.Age > 25 || person.Age < 18)     {       ModelState.AddModelError("Age", "有效'Age'必須在18到25周歲之間");     }   } } 

如上面的代碼片斷所示,我們?cè)赩alidate該方法中我們對(duì)作為參數(shù)的Person對(duì)象的3個(gè)屬性進(jìn)行逐條驗(yàn)證,如果提供的數(shù)據(jù)沒(méi)有通過(guò)驗(yàn)證,我們會(huì)調(diào)用當(dāng)前ModelState的AddModelError方法將指定的驗(yàn)證錯(cuò)誤消息轉(zhuǎn)換為ModelError保存起來(lái)。我們采用的具體的驗(yàn)證規(guī)則如下。

Person對(duì)象的Name、Gender和Age屬性均為必需字段,不能為Null(或者空字符串)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沙雅县| 米易县| 古蔺县| 平度市| 酉阳| 特克斯县| 玉门市| 永丰县| 孝义市| 商水县| 永宁县| 克拉玛依市| 甘谷县| 左云县| 搜索| 滦南县| 仙桃市| 大邑县| 东港市| 安陆市| 海城市| 麻阳| 浦江县| 凤翔县| 沙田区| 冀州市| 舞钢市| 九龙城区| 交城县| 桐乡市| 蚌埠市| 随州市| 灵宝市| 寿光市| 贵南县| 巴塘县| 金塔县| 北川| 工布江达县| 大石桥市| 双辽市|