【问题标题】:Show message to jquery validation with Ajax.BeginForm Asp.Net MVC使用 Ajax.BeginForm Asp.Net MVC 向 jquery 验证显示消息
【发布时间】:2019-04-10 20:30:36
【问题描述】:

我已经使用 asp.net mvc 中的 Ajax.BeginForm 测试了 jquery validate,虽然表单验证,如果表单无效,则不会显示错误消息

表格代码:

@using (Ajax.BeginForm("Save", "Student", null,
    new AjaxOptions { HttpMethod = "POST", OnSuccess = "StudentSucess", OnFailure = "StudentFail", OnBegin = "validateForm", },
    new { id = "form-student" }))
{
    <div class="form-group">
        <input type="hidden" class="form-control" id="Id" name="Id" />
    </div>
    <div class="form-group">
        <label>TESTE</label>
        <select name="Test" required="" class="form-control">
            <option value="">Select</option>
            <option value="1">A</option>
            <option value="2">B</option>
            <option value="3">C</option>
        </select>
    </div>
    <div class="form-group">
        <input type="text" class="form-control" id="Name" name="Name" placeholder="Name" autocomplete="off" required="" />
    </div>
    <div class="form-group m-t-10">
        <button type="submit" class="btn btn-theme">Create</button>
    </div>
}

验证功能代码

function validateForm() {
            var valid = $("#form-student").validate({
                rules: {
                    Name: {
                        required: true
                    },
                    Test: {
                        required: true
                    },
                },
                messages: {
                    Name: {
                        required: "Your name is required"
                    },
                    Test: {
                        required: "Test is required"
                    },
                }
            });

            return valid;
        }

验证图片

我需要显示相应验证字段的消息

重要提示:stackoverflow 用户将同一个问题标记为重复问题,并且该问题与他所说的重复问题不同,不能解决该问题。我尝试了 cmets 的所有解决方案,但它们都不适合我。

【问题讨论】:

  • 你在使用任何插件吗?
  • @shajji 我正在使用 jquery 验证。
  • HTML5 必需的属性是否存在干扰?您已经在那里声明这两个字段都是必需的(required="")。可能这会导致浏览器不触发提交按钮的点击。要对此进行测试,只需删除属性即可。
  • @Felix 哇,这就是问题所在。验证现已生效。非常感谢。
  • 只需在 validateForm() 方法之外调用$("#form-student").validate({....})

标签: jquery asp.net asp.net-mvc asp.net-mvc-4 jquery-validate


【解决方案1】:

OP的代码有两个问题,我将分别指出。

1) jQuery Validation 插件初始化错误(由 cmets 中的@Sparky 指出)

jQuery Validation 插件的推荐用法是在页面加载后调用 .validate 函数,而不是使用 onsubmit 事件处理程序。

<form id="myForm">
<input type="text" required="required">
</form>
<script>
$(document).ready(function() {
    $("#myform").validate();
});
</script>

https://jsfiddle.net/eky1rgjb/

这是我个人推荐的解决方案。

2nd) 当 HTML5 验证失败时,事件处理程序“onsubmit”不会触发。

这是一个更通用的解决方案。如果您希望使用 onsubmit 事件处理程序触发您的(自定义)验证,您需要知道只有在没有阻止提交的 HTML5 验证时才会调用该函数。

<b>This form WON'T fire the validation</b>
<form onsubmit='alert("validation")'>
    <input name="foo" type="text" required="">
    <br />
    <input type="submit" />
</form>
<b>This form WILL fire the validation, see the missing required=""</b>
<form onsubmit='alert("validation")'>
    <input name="foo" type="text">
    <br />
    <input type="submit" />
</form>

https://jsfiddle.net/0v253wz6/2/

【讨论】:

  • The jQuery Validate plugin works perfectly fine with HTML5 attributes,所以这句话的答案,没有任何额外的解释,本身就是错误的。解释为什么您的答案适用于 OP 的特定安装和框架对您很有帮助。见:jsfiddle.net/eky1rgjb
  • 我会更新答案。请参阅调整后的 Fiddle (jsfiddle.net/0v253wz6)。您正在使用“准备好文档”,OP 正在使用“提交表单”。
  • 您的新 jsFiddle 不会在任何地方调用 .validate()!如果不调用.validate(),您就不会初始化 jQuery Validate,因此您甚至不会使用 jQuery Validate 插件。并且 OP 不应该使用“on form submit”,因为 jQuery Validate 插件会在插件正确初始化时自动捕获提交事件。
  • 我的小提琴演示了当 html5 验证失败时 onsubmit 事件处理程序不会触发。我相信您可以通过几种变通方法解决这个问题,例如在全局 Ajax 函数中实现验证。但问题是为什么他/她的消息不会显示 -> 因为 html5 验证阻止了函数调用。
  • 对,但他应该首先绝对不要在提交事件上调用.validate()。如果他正确地初始化了这个插件,也就是在页面加载时调用.validate(),那么 HTML5 属性根本就无关紧要……事实上,这个插件旨在利用 HTML5 属性来声明它自己的规则。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2016-04-20
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多