【发布时间】:2017-04-04 08:25:12
【问题描述】:
所以我在 Stack Overflow 上解决了很多问题,并验证了我能想到的几乎所有内容,但我无法让客户端验证正常工作。我不知道我做错了什么。
为了缩短问题,删除了原始代码,因为下面提供了一个更简化的示例。
编辑:
我正在编辑这个问题,试图消除混乱并找到问题的根源。因此,为了让这个变得非常简单,这是我在我的项目中所做的:
第 1 步:创建一个新的 TestController
public class TestController : Controller
{
[HttpGet, AllowAnonymous]
public ActionResult Index()
{
return View(new TestViewModel());
}
[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public ActionResult Index(TestRequestModel requestModel)
{
if (!@ModelState.IsValid)
{
return new TestViewModel
{
Email = requestModel.Email
};
}
return View();
}
}
第 2 步:创建一个新的 TestView
@model MyProject.Models.TestViewModel
@{
ViewBag.Title = "User Console Home";
}
@using (Html.BeginForm("Index", "Test", FormMethod.Post, new {@class = "form-horizontal", role = "form"}))
{
@Html.ValidationMessageFor(m => m.Email)
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
}
第 3 步:创建一个新的 TestRequestModel
public class TestRequestModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
}
第 4 步:创建一个新的 TestViewModel
public class TestViewModel
{
public string Email { get; set; }
}
第 5 步:确保 Web.Config 包含正确的键
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
第 6 步:确保我的 _Layout.cshtml 包含正确的 javascript 文件
<!DOCTYPE html>
<html>
<head>
<script src="/JQuery/jquery-2.2.3.js"></script>
<script src="/JQuery/jquery-ui-1.11.4.js"></script>
<script src="/JQuery/jquery.validate.js"></script>
<script src="/JQuery/jquery.validate.unobtrusive.js"></script>
</head>
<body>
@RenderBody()
</body>
</html>
- 将我的项目与具有客户端验证功能的全新项目进行比较,代码几乎完全相同
我错过了什么?开箱即用,我不需要编写适配器来获得必需或电子邮件地址属性工作。我觉得我缺少一个设置或一段代码,我就是不知道是什么。
【问题讨论】:
-
你的
GetClientValidationRules()方法是否被击中? -
@StephenMuecke 据我所知不是。我在上面设置了一个断点并重建了网站,以确保它没有被击中。但是,服务器端验证运行良好。
-
您已经完全改变了问题,但 Reza Aghaei 是正确的 - 视图中的模型是
TestViewModel,它没有应用于其Email属性的任何验证属性,因此没有 @为该属性生成了 987654330@ 属性,因此不会向jquery.validate添加任何规则,只需将[Required]和[EmailAddress]属性添加到TestViewModel中的Email属性,您将获得客户端验证。
标签: c# asp.net-mvc validation asp.net-mvc-5 client-side-validation