因此,我已经在Stack溢出上经历了大量的问题,并且验证了我所能想到的一切,并且无法让客户端验证工作。我不知道我做错了什么。
为了缩短这个问题,原代码被删除,下面提供了一个更简化的示例。
编辑:
我正在编辑这个问题,试图消除混乱,并找到问题的根源。为了使这个非常简单,下面是我在我的项目中所做的工作:
步骤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>我遗漏了什么?开箱即用,我不需要编写适配器就可以获得必需的或EmailAddress属性工作。我觉得好像有一个设置或一段代码我丢失了,我只是不知道是什么。
发布于 2016-11-24 19:48:30
用于视图的模型是TestViewModel
@model MyProject.Models.TestViewModel但是您没有用验证属性修饰TestViewModel的TestViewModel属性,所以将视图模型更改为:
public class TestViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
}备注:客户端验证将用于您使用TestViewModel创建的呈现视图中。因此,要启用客户端验证,您需要用验证属性来修饰它的属性。这些验证与TestRequestModel没有任何关系,您使用它作为POST操作的输入。当模型绑定时,您在TestRequestModel上设置的属性将在向服务器发送数据后被击中。
发布于 2016-11-22 15:31:45
你的代码在一个新的项目中为我工作。我刚刚更改了TestViewModel model.Other代码是由return view(model)发送到视图的same.The模型,以及您在视图中使用的模型,即@model MyProject.Models.TestViewModel应该与客户机验证相同。
public class TestViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
}要么像我一样更改TestViewModel,要么在视图中使用TestRequestModel,并将索引方法的返回语句更改为返回视图(新的TestRequestModel());
如果它不能工作,将js文件直接拖动到您的页面中,并测试js是否正在加载。
https://stackoverflow.com/questions/40711746
复制相似问题