Html 现场验证部分有效

Html 现场验证部分有效,html,asp.net-mvc,Html,Asp.net Mvc,我有一个ASP.NETMVC表单,它需要一个“名称” 我遗漏了什么,用户\浏览器如何解决这个问题?我要做的是进入您的ViewModels。客户端类并添加: using System.ComponentModel.DataAnnotations; 然后,您可以在.Name属性上方添加验证,如下所示: [Required()] [StringLength(255, MinimumLength = 5)] public string Name { get; set;

我有一个ASP.NETMVC表单,它需要一个“名称”


我遗漏了什么,用户\浏览器如何解决这个问题?

我要做的是进入您的ViewModels。客户端类并添加:

    using System.ComponentModel.DataAnnotations;
然后,您可以在.Name属性上方添加验证,如下所示:

    [Required()]
    [StringLength(255, MinimumLength = 5)]
    public string Name { get; set; }
然后在新方法中,您应该检查ModelState.IsValid,如下所示:

    if (ModelState.IsValid)
    {
      //Save the data
    }

也就是说,您是否在引发异常之前执行了“保存”,用户是否提交了看起来像空格的不可打印字符?

客户端无法禁用服务器端验证。我能确定的唯一问题是,您只能验证输入是否为null或空


您还应该检查输入是否仅为空格(“”),我相信这就是问题所在。

您是否验证输入是否为空格“”?
必需的
是HTML5属性,在您的用户可能正在使用的旧浏览器中不受支持。相反,使用MVC的内置客户端验证。但无论如何,您必须始终在服务器上进行验证。我相信“”包含在验证中,我刚刚检查了Safari和chrome,看起来是正确的我在模型上有以下内容[Required(AllowEmptyStrings=false,ErrorMessage=“Required”)][StringLength(50,ErrorMessage=“Name:To Long”)]您正在检查ModelState.IsValid吗?如果查看提交的数据,长度是否为0?如果大于0,则分析并查看ASCII码是32(空格)还是其他。IsNullOrEmpty不应处理字符串中的任何值和空格。此外,用户通过客户端验证轻松获得的一种方法是使用代理编辑器,如Burpuite或Fiddler。他们输入一个值以通过验证,然后在提交到服务器并修改响应之前捕获提交。您必须非常精明,我怀疑用户是否有意这样做,但这是一种绕过客户端验证的方法。这就是为什么您总是希望在服务器端检查ModelState.IsValid,因为有很多方法。听起来您已经正确设置了DataAnnotations。
    [Required()]
    [StringLength(255, MinimumLength = 5)]
    public string Name { get; set; }
    if (ModelState.IsValid)
    {
      //Save the data
    }