C# ASP.NET MVC 5验证程序仅在验证后工作
我正在尝试为仓库库存数据库创建一个新部件,但我的验证器工作不正常。这就是正在发生的事情 输入:结果:空白(无) 输入: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”时立即点击 型号: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来捕捉
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*"));