Jquery Validate在MVC C#中不起作用

时间:2015-06-26 19:47:21

标签: jquery ajax asp.net-mvc jquery-validate unobtrusive-validation

我正在开发一个MVC应用程序,我需要检查用户是否已注册,为此我创建了一个模型

LD_LIBRARY_PATH

到目前为止,我的问题是我需要通过AJAX以JSON格式发送用户的信息,我需要验证是否指定了用户名和密码信息,以便完成我对此进行编码:

public class Ejemplo
 {
   [Required(ErrorMessage="Favor especificar Username")]
   [DataType(DataType.Text)]
   public string usuario { get; set; }

   [Required(ErrorMessage="Favor especificar password")]
   [DataType(DataType.Password)]
   public string password { get; set; }
 }

这是我的表单(上面的代码和表单在同一个文件中:Index.cshtml)

<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.10.2.js"></script>
    <script src="~/Scripts/jquery.validate.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
    <script type="text/javascript">
    $(document).ready(function () {

        $('#myform').validate({ // initialize the plugin
            rules: {
                usuario: {
                    required: true,
                    minlength: 12
                },
                password: { required: true }
            },
            messages: {
                usuario: {
                    required: "must specify username --> validate !!!",
                    minlength: "not a valid Lenght --> validate !!!"
                },
                password: {
                    required: "must specify a password --> validate !!!"
                }
            },
             submitHandler:
                    $("#myform").on('submit', function () {
                        alert("have just pressed submit");
                        if ($("#myform").valid()) {
                            alert("here some code inside $.AJAX({})");
                        }
                        return false;
                    })
        })
    });

但它没有验证,并且在用户名和密码为空的情况下不显示任何消息,它只显示此警报:alert(“刚刚按下提交”);但是从不显示第二个警报:alert(“这里有一些代码在$ .AJAX({})中”);

这两个警报
<fieldset>
 <legend> Validaciones MVC </legend>
  @using (Html.BeginForm("Prueba", "Prueba", FormMethod.Post, new { @id = "myform" }))
  {

     @Html.LabelFor(M => M.usuario);
     <br />
     @Html.EditorFor(M=>M.usuario)
     @Html.ValidationMessageFor(M => M.usuario);
     <br />
     @Html.LabelFor(M=>M.password)
     <br />
     @Html.EditorFor(M=>M.password);
     @Html.ValidationMessageFor(M=>M.password)
     <br />
     <br />

  <input type="submit" id="boton_id" name="boton_name" value="Enviar" />
                }
        </fieldset>

所以,请你帮帮我,告诉我我的问题在哪里或者我错过了什么?

2 个答案:

答案 0 :(得分:1)

首先,用于调用validate的JavaScript在语法上是不正确的。您需要将submitHandler代码包装在函数中:

submitHandler: function () { .... }

接下来,在submitHandler事件被触发时(以及表单有效时)已调用submit。您不需要绑定另一个事件处理程序或检查表单在submitHandler内是否有效。

符合documentation

  

回复在表单有效时处理实际提交。获取表单作为唯一参数。替换默认提交。在验证后通过Ajax提交表单的正确位置。

以下内容应该足够了:

submitHandler: function () {
    // Submit the form via AJAX.
}

答案 1 :(得分:1)

我想添加与@AndrewWhitaker评论相关的补充信息:

  

嗯,您可以尝试删除不显眼的验证。它可能是   造成冲突。

这确实是一个问题,因为jquery.validate.unobtrusive.js在内部创建验证器并将其与表单相关联。接下来,当您调用以下代码时:

$(document).ready(function () {
    $('#myform').validate({ // initialize the plugin

jquery.validate.js实际上做了什么,如下:

validate: function( options ) {
    ...
    // check if a validator for this form was already created
    var validator = $.data(this[0], 'validator');
    if ( validator ) {
        return validator;
    }

如您所见,它只是检查是否有与您的表单关联的验证器。如果是,则简单地返回(在这种情况下,您的初始化设置无关紧要)。

你可以在这里做什么(而不是删除jquery.validate.unobtrusive.js,除非你不需要它),是直接访问和更改验证器设置,例如。

var validator = $('#myForm').validate();
validator.settings.submitHandler = function(form) { ...
// etc.