zoukankan      html  css  js  c++  java
  • MVC中数据的内部校验

    针对MVC中实例类型的修饰,我们可以采用DataAnnotations类来完成,该类所处的命名空间是System.ComponentModel.DataAnnotations;

    一、通过开类型,能够修改Model类型的属性,如下代码所示:

    public class Employee
        {
            [Key]
            public int EmployeeId { get; set; }
    
            [Required(ErrorMessage = "Enter First Name"), StringLength(50)]
            public string FirstName { get; set; }
    
            [StringLength(50,ErrorMessage="Last Name length should be greater than 50")]
            public string LastName { get; set; }
    
            public int Salary { get; set; }
        }

    备注:

    1、[key]主键唯一,Required必填,ErrorMessage错误提示内容,StringLength表述字段长度。

    Form表单代码:

    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>CreateEmployee</title>
    </head>
    <body>
        <div>
            <form action="/Employee/SaveEmployee" method="post">
               <table>
                <tr>
                    <td>First Name:</td>
                    <td><input type="text" id="TxtFName" name="FirstName" value="" /></td>
                    <td>@Html.ValidationMessage("FirstName")</td>
                </tr>
                <tr>
                    <td>Last Name:</td>
                    <td><input type="text" id="TxtLName" name="LastName" value="" /></td>
                    <td>@Html.ValidationMessage("LastName")</td>
                </tr>
                <tr>
                    <td>Salary:</td>
                    <td><input type="text" id="TxtSalary" name="Salary" value="" /></td>
                    <td>@Html.ValidationMessage("Salary")</td>
                </tr>
                <tr>
                    <td>
                        <input type="submit" name="BtnSave" value="Save Employee" />
                        <input type="submit" name="BtnSave" value="Cancel" />
                    </td>
                </tr>
               </table>
            </form>
        </div>
    </body>
    </html>

    备注:@Html.ValidationMessage表述验收字段异常时,显示异常提示信息。

    后台Action代码:

          public ActionResult SaveEmployee(Employee et, string BtnSave)
            {
                switch (BtnSave)
                {
                    case "Save Employee":
                        if (ModelState.IsValid)
                        {
                            EmployeeBusinessLayer empbal = new EmployeeBusinessLayer();
                            empbal.SaveEmployee(et);
                            return RedirectToAction("Index");
                        }
                        else
                        {
                            return View("CreateEmployee");
                        }
                    case "Cancel":
                    //    RedirectToAction("index");
                        return RedirectToAction("Index");                                      
                }
                return new EmptyResult();
            }

    备注:ModelState.IsValid表述Model字段验证是否有效

    二、自定义服务端验证

    1、新建自定义类:

    public class FirstNameValidation : ValidationAttribute
        {
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                if (value == null)
                {
                    return new ValidationResult("Please Provide First Name");
                }
                else
                {
                    if (value.ToString().Contains("@"))
                    {
                        return new ValidationResult("First Name should not contain @");
                    }
                }
                return ValidationResult.Success;
            }
        }

    2、使用自定义验证类型

     public class Employee
        {
            [Key]
            public int EmployeeId { get; set; }
    
            [Required(ErrorMessage = "Enter First Name"), StringLength(50), FirstNameValidation]
            public string FirstName { get; set; }
    
            public int Salary { get; set; }
        }
  • 相关阅读:
    好消息:Dubbo & Spring Boot要来了
    过年回家,程序猿最怕的5件事
    到底什么是分布式系统?
    SLA服务可用性4个9是什么意思?怎么达到?
    漏洞:会话固定攻击(session fixation attack)
    Mybatis传递多个参数的4种方式(干货)
    注意:阿里Druid连接池监控的两个坑
    消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?
    Java程序员必须掌握的常用Linux命令。
    编程词汇
  • 原文地址:https://www.cnblogs.com/xibei666/p/4989646.html
Copyright © 2011-2022 走看看