首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC5客户端验证不起作用

MVC5客户端验证不起作用
EN

Stack Overflow用户
提问于 2016-11-21 02:01:22
回答 2查看 2.1K关注 0票数 2

因此,我已经在Stack溢出上经历了大量的问题,并且验证了我所能想到的一切,并且无法让客户端验证工作。我不知道我做错了什么。

为了缩短这个问题,原代码被删除,下面提供了一个更简化的示例。

编辑:

我正在编辑这个问题,试图消除混乱,并找到问题的根源。为了使这个非常简单,下面是我在我的项目中所做的工作:

步骤1:创建一个新的TestController

代码语言:javascript
复制
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

代码语言:javascript
复制
@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

代码语言:javascript
复制
public class TestRequestModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
}

步骤4:创建一个新的TestViewModel

代码语言:javascript
复制
public class TestViewModel
{
    public string Email { get; set; }
}

步骤5:确保Web.Config包含正确的密钥

代码语言:javascript
复制
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

步骤6:确保我的_Layout.cshtml包含正确的javascript文件

代码语言: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>
  1. 将我的项目与具有客户端验证功能的全新项目进行比较,代码几乎是可识别的。

我遗漏了什么?开箱即用,我不需要编写适配器就可以获得必需的或EmailAddress属性工作。我觉得好像有一个设置或一段代码我丢失了,我只是不知道是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-24 19:48:30

用于视图的模型是TestViewModel

代码语言:javascript
复制
@model MyProject.Models.TestViewModel

但是您没有用验证属性修饰TestViewModelTestViewModel属性,所以将视图模型更改为:

代码语言:javascript
复制
public class TestViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
}

备注:客户端验证将用于您使用TestViewModel创建的呈现视图中。因此,要启用客户端验证,您需要用验证属性来修饰它的属性。这些验证与TestRequestModel没有任何关系,您使用它作为POST操作的输入。当模型绑定时,您在TestRequestModel上设置的属性将在向服务器发送数据后被击中。

票数 4
EN

Stack Overflow用户

发布于 2016-11-22 15:31:45

你的代码在一个新的项目中为我工作。我刚刚更改了TestViewModel model.Other代码是由return view(model)发送到视图的same.The模型,以及您在视图中使用的模型,即@model MyProject.Models.TestViewModel应该与客户机验证相同。

代码语言:javascript
复制
public class TestViewModel
    {
        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public string Email { get; set; }
    }

要么像我一样更改TestViewModel,要么在视图中使用TestRequestModel,并将索引方法的返回语句更改为返回视图(新的TestRequestModel());

如果它不能工作,将js文件直接拖动到您的页面中,并测试js是否正在加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40711746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档