C# ASP.NET MVC 5验证程序仅在验证后工作

C# ASP.NET MVC 5验证程序仅在验证后工作,c#,asp.net,validation,asp.net-mvc-5,C#,Asp.net,Validation,Asp.net Mvc 5,我正在尝试为仓库库存数据库创建一个新部件,但我的验证器工作不正常。这就是正在发生的事情 输入:结果:空白(无) 输入:b结果:空白(无) 输入:abc结果:空白(无) 输入:abcdsfasd结果:空白(无) 输入:123结果:空白(通过) 输入:结果:REQ 输入:12345结果:REG EXP不匹配 输入:123结果:空白(通过) 输入:结果:REQ 输入:a123bc223结果:REQ 因此,我首先必须在(1-9999)中输入一个有效条目,或者通过我的4位数要求,以获得REG EXP来捕捉

我正在尝试为仓库库存数据库创建一个新部件,但我的验证器工作不正常。这就是正在发生的事情

输入:结果:空白(无) 输入:b结果:空白(无) 输入:abc结果:空白(无) 输入:abcdsfasd结果:空白(无) 输入:123结果:空白(通过) 输入:结果:REQ 输入:12345结果:REG EXP不匹配 输入:123结果:空白(通过) 输入:结果:REQ 输入:a123bc223结果:REQ

因此,我首先必须在(1-9999)中输入一个有效条目,或者通过我的4位数要求,以获得REG EXP来捕捉它,然后我开始在输入的任何字母上获得REQ错误,并且REG EXP与5+数字不匹配

为什么REG EXP没有碰到字母?为什么REQ只有在输入有效条目后才会命中?当然,如果我点击submit,将出现REQ错误,但我希望REG EXP在第一次键入“a”时立即点击

型号:

namespace Inventory.Database
{
    [MetadataType(typeof(InventoryPartsMetaData))]
    public partial class Table_Part_Warehouse
    {
    }

    public class InventoryPartsMetaData
    {
        [RegularExpression(@"[1-9][0-9]{0,3}",ErrorMessage = "REG EXP NOT MATCHED")]
        [Required(ErrorMessage = "REQ")]
        [DisplayName("CQ P/N")]
        public int C_CQPN { get; set; }
    }
}
控制器:

namespace Inventory.Controllers
{
    [Authorize]
    public class InventoryController : Controller
    {
        InventoryPartsContext db = new InventoryPartsContext();

        // GET: Parts
        public ActionResult Parts()
        {
            return View(db.Table_Part_Warehouse.ToList());
        }

        [HttpGet]
        public ActionResult PartsCreate()
        {
            ViewBag.Count = db.Table_Part_Warehouse.Count() + 1;
            return View();
        }

        [HttpPost]
        public ActionResult PartsCreate(Table_Part_Warehouse tb_part_warehouse)
        {
            if (ModelState.IsValid)
            {
                db.Table_Part_Warehouse.Add(tb_part_warehouse);
                db.SaveChanges();
                return RedirectToAction("Parts");
            }
            return View(tb_part_warehouse);
        }
    }
}
视图:

捆绑包:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*"));

int
上的正则表达式没有意义。使用
[Range(19999)]
同样的故事,直到输入了有效的条目才给出错误。当您输入“a”或“abc”时,它不应该立即给出错误。事实并非如此。一旦我输入123 hit tab,返回并删除它,然后键入“a”,它会给我REQ错误。没有道理,没有。验证是“惰性的”(只有在您签出
.blur()
事件时才会触发)。一旦触发,它将在每次
.keyUp()
事件中进行验证。当对象失去焦点时,onblur事件发生。onblur事件最常用于表单验证代码(例如,当用户离开表单字段时)。所以,在我键入有效代码后,它肯定会在.keyUp()事件上工作,因为我可以键入一个,然后弹出错误消息。但是如果我重新加载页面,键入a,tabout,就不会出现错误消息。似乎验证器只有在收到有效条目后才使用.keyUp()事件。否。在对表单中的任何控件进行任何验证后,它开始使用
.keyUp()
。有一篇文章比我解释得更好,当我有机会时,我会发现在
int
上添加linkA正则表达式毫无意义。使用
[Range(19999)]
同样的故事,直到输入了有效的条目才给出错误。当您输入“a”或“abc”时,它不应该立即给出错误。事实并非如此。一旦我输入123 hit tab,返回并删除它,然后键入“a”,它会给我REQ错误。没有道理,没有。验证是“惰性的”(只有在您签出
.blur()
事件时才会触发)。一旦触发,它将在每次
.keyUp()
事件中进行验证。当对象失去焦点时,onblur事件发生。onblur事件最常用于表单验证代码(例如,当用户离开表单字段时)。所以,在我键入有效代码后,它肯定会在.keyUp()事件上工作,因为我可以键入一个,然后弹出错误消息。但是如果我重新加载页面,键入a,tabout,就不会出现错误消息。似乎验证器只有在收到有效条目后才使用.keyUp()事件。否。在对表单中的任何控件进行任何验证后,它开始使用
.keyUp()
。有一篇文章比我解释得更好,当我有机会找到它时,我会添加一个链接
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("Scripts", required: false)
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*"));