我正在开发一个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>
所以,请你帮帮我,告诉我我的问题在哪里或者我错过了什么?
答案 0 :(得分:1)
首先,用于调用validate
的JavaScript在语法上是不正确的。您需要将submitHandler
代码包装在函数中:
submitHandler: function () { .... }
接下来,在submitHandler
事件被触发时(以及表单有效时)已调用submit
。您不需要绑定另一个事件处理程序或检查表单在submitHandler
内是否有效。
回复在表单有效时处理实际提交。获取表单作为唯一参数。替换默认提交。在验证后通过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.