zoukankan      html  css  js  c++  java
  • Model validation in ASP.NET Core MVC and Razor Pages

    Model validation in ASP.NET Core MVC and Razor Pages

    [Remote] attribute

    The [Remote] attribute implements client-side validation that requires calling a method on the server to determine whether field input is valid. For example, the app may need to verify whether a user name is already in use.

    To implement remote validation:

    1. Create an action method for JavaScript to call. The jQuery Validate remote method expects a JSON response:

      • true means the input data is valid.
      • false, undefined, or null means the input is invalid. Display the default error message.
      • Any other string means the input is invalid. Display the string as a custom error message.

      Here's an example of an action method that returns a custom error message:

      C#
    • [AcceptVerbs("GET", "POST")]
      public IActionResult VerifyEmail(string email)
      {
          if (!_userService.VerifyEmail(email))
          {
              return Json($"Email {email} is already in use.");
          }
      
          return Json(true);
      }
      
    • In the model class, annotate the property with a [Remote] attribute that points to the validation action method, as shown in the following example:

      C#
    [Remote(action: "VerifyEmail", controller: "Users")]
    public string Email { get; set; }
    

    The [Remote] attribute is in the Microsoft.AspNetCore.Mvc namespace.

    Additional fields

    The AdditionalFields property of the [Remote] attribute lets you validate combinations of fields against data on the server. For example, if the User model had FirstName and LastName properties, you might want to verify that no existing users already have that pair of names. The following example shows how to use AdditionalFields:

    C#
    [Remote(action: "VerifyName", controller: "Users", AdditionalFields = nameof(LastName))]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }
    
    [Remote(action: "VerifyName", controller: "Users", AdditionalFields = nameof(FirstName))]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    

    AdditionalFields could be set explicitly to the strings "FirstName" and "LastName", but using the nameof operator simplifies later refactoring. The action method for this validation must accept both firstName and lastName arguments:

    C#
    [AcceptVerbs("GET", "POST")]
    public IActionResult VerifyName(string firstName, string lastName)
    {
        if (!_userService.VerifyName(firstName, lastName))
        {
            return Json($"A user named {firstName} {lastName} already exists.");
        }
    
        return Json(true);
    }
    

    When the user enters a first or last name, JavaScript makes a remote call to see if that pair of names has been taken.

    To validate two or more additional fields, provide them as a comma-delimited list. For example, to add a MiddleName property to the model, set the [Remote] attribute as shown in the following example:

    C#
    [Remote(action: "VerifyName", controller: "Users", AdditionalFields = nameof(FirstName) + "," + nameof(LastName))]
    public string MiddleName { get; set; }
    

    AdditionalFields, like all attribute arguments, must be a constant expression. Therefore, don't use an interpolated string or call Join to initialize AdditionalFields.

  • 相关阅读:
    jquery插件之文字无缝向上滚动
    jquery插件之tab标签页或滑动门
    jquery插件之表格隔行变色并鼠标滑过高亮显示
    jquery过滤器之:contains()、.filter()
    css3动画在动作结束时保持该状态不变的解决办法
    CSS3两个动画顺序衔接播放
    css去掉使用bootstrap框架后打印网页时预览效果下的超链接
    R in action读书笔记(13)第十章 功效分析
    Python学习 Day 7 面向对象 类和实例 访问限制
    R in action读书笔记(12)第九章 方差分析
  • 原文地址:https://www.cnblogs.com/chucklu/p/12603727.html
Copyright © 2011-2022 走看看