中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC5之服務端驗證的示例分析

發布時間:2021-09-01 11:47:29 來源:億速云 閱讀:139 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關ASP.NET MVC5之服務端驗證的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

使用數據注解API來進行服務端驗證。ASP.NET MVC 框架在執行的時候,驗證所有傳遞到控制器的數據,如果驗證失敗就把錯誤消息,填充到ModelState對象中,并且把這個對象傳遞給控制器,然后控制器中的方法,根據Modelstate的狀態來判斷,是否驗證失敗還是驗證通過。

在這里,我將會使用兩種方法來驗證數據的合法性,一個是手動添加錯誤消息到ModelState對象中,另外一個方法是使用數據注解【Data Annotation】 API,來做。

先來看看使用手動驗證的方式吧: 

我們新建一個空白的MVC項目:添加一個Student實體: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Server_Side_Validation_IN_MVC.Models
{
 public class Student
 {
  public string Name { get; set; }

  public string Email { get; set; }

 }
}

然后添加一個Student控制器: 

using Server_Side_Validation_IN_MVC.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc;

namespace Server_Side_Validation_IN_MVC.Controllers
{
 public class StudentController : Controller
 {
  // GET: Student
  public ActionResult Index()
  {
   return View();
  }

  [HttpPost]
  public ActionResult Index(Student model)
  {

   //服務端驗證,方法一,手動添加錯誤消息到ModelState對象中
   
   //如果Name是空的
   if (string.IsNullOrEmpty(model.Name))
   {
    ModelState.AddModelError("Name", "Name is required");
   }

   //如果Email是空的
   if (string.IsNullOrEmpty(model.Email))
   {
    ModelState.AddModelError("Email", "Email is required");
   }
   else
   {
    string emailRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
           @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
            @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
    Regex re = new Regex(emailRegex);
    //Email不為空的時候,但格式不合法
    if (!re.IsMatch(model.Email))
    {
     ModelState.AddModelError("Email", "Email is not valid");
    }
   }
   //實體驗證通過
   if (ModelState.IsValid)
   {
    ViewBag.Name = model.Name;
    ViewBag.Email = model.Email;
   }
   return View(model);
  }
 }
}

創建Index視圖: 

@model Server_Side_Validation_IN_MVC.Models.Student
@{
 Layout = null;
}

<!DOCTYPE html>

<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>Index</title>
</head>
<body>
 <div> 
  @using (Html.BeginForm())
  { 
  //使用ViewData.ModelState.IsValid來判斷ModelState的狀態
   if (ViewData.ModelState.IsValid)
   {
    if (ViewBag.Name != null)
    { 
    <b>
     Name:@ViewBag.Name<br/>
     Email:@ViewBag.Email
    </b>
    }
   }
   
   <fieldset>
    <legend>Student</legend>
    <div>
     @*生成label標簽*@
     @Html.LabelFor(model=>model.Name)
    </div>
    <div>
     @*生成文本框*@
     @Html.EditorFor(model=>model.Name)
     @*不合法*@
     //// @if (!ViewData.ModelState.IsValid)//這樣寫有問題正確的寫法: @if (!ViewData.ModelState.IsValid &&ViewData.ModelState["Email"].Errors.Count>0)
     { 
    //從字典中獲取錯誤消息:@ViewData.ModelState["Name"].Errors[0].ErrorMessage
     <span >@ViewData.ModelState["Name"].Errors[0].ErrorMessage</span>
     }

    </div>
    <div>
     @Html.LabelFor(model=>model.Email)
    </div>
    <div>
     @Html.EditorFor(model=>model.Email)
     /////@if (!ViewData.ModelState.IsValid) 這樣寫有問題:      // 正確的寫法在下面     @if (!ViewData.ModelState.IsValid &&ViewData.ModelState["Email"].Errors.Count>0)
     {
      //從字典中獲取錯誤消息:@ViewData.ModelState["Email"].Errors[0].ErrorMessage
      <span >@ViewData.ModelState["Email"].Errors[0].ErrorMessage</span>
     }
    </div>
    <p>
     <input type="submit" value="Create"/>
    </p>
   </fieldset>
   
  }
 </div>
</body>
</html>

然后,修改一下默認的路由: 

public static void RegisterRoutes(RouteCollection routes)
  {
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

   routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Student", action = "Index", id = UrlParameter.Optional }
   );
  }

運行之后,報錯。查找了一下原因,修改了一下視圖代碼:

ASP.NET MVC5之服務端驗證的示例分析

運行之后,

ASP.NET MVC5之服務端驗證的示例分析

接著驗證一下,Name不為空,Email輸入非法格式的數據:

ASP.NET MVC5之服務端驗證的示例分析

最后驗證一下,輸入合法的數據:

ASP.NET MVC5之服務端驗證的示例分析

 好了,現在看看第二種方式,使用數據注解來進行服務端驗證:
 新建一個類:避免混淆, 

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace Server_Side_Validation_IN_MVC.Models
{
 public class StudentServer
 {
  [Required(ErrorMessage="Name為必填項")]
  public string Name { get; set; }

  [Required(ErrorMessage="電子郵件必須")]
  [EmailAddress(ErrorMessage="電子郵件格式不對")]
  public string Email { get; set; }
 }
}

在控制器中新建兩個方法: 

 public ActionResult SeverSideIndex()
  {
   return View();
  }

  [HttpPost]
  public ActionResult SeverSideIndex(StudentServer model)
  {
   if (ModelState.IsValid)
   {
    ViewBag.Name = model.Name;
    ViewBag.Email = model.Email;
   }
   return View();

  }

對應的視圖: 

@model Server_Side_Validation_IN_MVC.Models.StudentServer
@{
 Layout = null;
}
@if (ViewData.ModelState.IsValid)
{
 if (ViewBag.Name != null)
 { 
 <b>
  Name:@ViewBag.Name<br />
  Email:@ViewBag.Email
 </b>
 }
}

<!DOCTYPE html>

<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>SeverSideIndex</title>
</head>
<body>
 <div> 
  @using (Html.BeginForm())
  { 
  @Html.ValidationSummary(true)
   <fieldset>
    <legend>Student</legend>
    <div>
     @Html.LabelFor(model=>model.Name)
    </div>
    <div>
     @Html.EditorFor(model=>model.Name)
     @Html.ValidationMessageFor(model=>model.Name)
    </div>
    <div>
     @Html.LabelFor(model => model.Email)
    </div>
    <div>
     @Html.EditorFor(model => model.Email)
     @Html.ValidationMessageFor(model => model.Email)
    </div>
    <p>
     <input type="submit" value="Create"/>
    </p>
   </fieldset>
   
  }
 </div>
</body>
</html>

ASP.NET MVC5之服務端驗證的示例分析

首先驗證,都為空的情況:

ASP.NET MVC5之服務端驗證的示例分析

Name不為空,Email為空

ASP.NET MVC5之服務端驗證的示例分析

Name不為空,Email輸入非法格式數據

ASP.NET MVC5之服務端驗證的示例分析

兩個都輸入合法的數據:

ASP.NET MVC5之服務端驗證的示例分析

好了,以上就是MVC中服務端驗證了,我們一般是使用第二種,來進行驗證。也就是數據注解。

關于“ASP.NET MVC5之服務端驗證的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌鲁木齐县| 前郭尔| 贡觉县| 栾城县| 和林格尔县| 西林县| 庆城县| 会昌县| 大庆市| 孟津县| 台南县| 诏安县| 永福县| 金塔县| 镶黄旗| 宁阳县| 理塘县| 犍为县| 万山特区| 合水县| 清涧县| 紫云| 休宁县| 云霄县| 舟山市| 孝义市| 秦皇岛市| 宁城县| 大宁县| 道真| 太康县| 大城县| 莎车县| 平舆县| 北辰区| 德钦县| 牡丹江市| 凌海市| 大方县| 额济纳旗| 宜宾市|