我有一个由JQuery提交的表单。有时,当表单提交失败时,表单内的值会自动作为查询字符串附加到url。我搜索了很多,但我找不到任何有关这种奇怪行为的信息。这是一个发生了什么的例子。
有一个包含两个字段的表单
$("#MyForm").validate({
rules: {
"UserName": {
required: true
},
"Password": {
required: true,
minlength: 8
}
},
messages: {
"UserName": {
required: "UserName is required"
},
"Password": {
required: "Password is required"
}
},
submitHandler: function () {
var userName = $("#UserName").val();
var password = $("#Password").val();
var myObject = {UserName:userName, Password: password}
$.post('/MyAuthenticationUrl',myObject,function(){
//Redirect to Home page on success
});
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm" action="/MyUrl"/>
<input type="text" id="UserName" />
<input type="password" id="Password"/>
<input type="submit" id="Submit"/>
<form>
&#13;
对于表单验证和提交,我使用JqueryValidation.org
中的JqueryValidation插件有时当我点击提交时,userName和密码会附加到查询字符串。
所以,如果你有一个像http://localhost/Home/Index这样的网址,那就变成了 http://localhost/Home/Index/?UserName=blah&Password=blah
我怀疑它必须使用JqueryValidation插件执行某些操作,但我无法在问题页面中找到任何相关内容here
答案 0 :(得分:1)
您显然没有正确包含和初始化jQuery Validate插件(不在您的OP中),因此您只需将表单提交到action
属性中的网址。
报告的问题描述了当method="post"
标记中没有form
属性时,(非ajax)表单提交的默认行为...查询字符串被附加到默认情况下为网址。
这与jQuery Validate插件无关。
就此而言......
submitHandler: function () {
var userName = $("#UserName").val();
var password = $("#Password").val();
var myObject = {UserName:userName, Password: password}
$.post('/MyAuthenticationUrl',myObject,function(){
//Redirect to Home page on success
});
}
由于插件已损坏(未包含在内,JavaScript错误等),因此submitHandler
无法发挥作用。但是,您的意图似乎是使用ajax .post()
提交表单和"Redirect to Home page on success"
。我不明白这一点。如果您想重定向到另一个网址,那么您不需要ajax ...只需使用action
属性的网址,该表单就会自动提交并重定向到此网址。完全取出submitHandler
将恢复此默认行为。
你的标记......
<input type="text" id="UserName" />
<input type="password" id="Password"/>
要使用jQuery Validate插件,必须在考虑进行验证的任何字段上都有name
属性。
<input type="text" name="UserName" id="UserName" />
<input type="password" name="Password" id="Password"/>
这没有例外或解决方法;这是插件内部跟踪各种元素的方式。
最后,您的问题标有asp.net和asp.net-mvc。在ASP中,jQuery Validate插件由包含的Unobtrusive Validation插件自动初始化。如果是这种情况,则无法直接调用.validate()
方法,因为Unobtrusive Validation插件会根据HTML标记中的数据属性自动构造并调用.validate()
。 jQuery Validate插件将仅使用.validate()
的第一个实例,并完全忽略任何后续调用。
移除您对.validate()
的来电以验证此操作。如果没有任何变化,那么你就会知道ASP内置的Unobtrusive Validation会被覆盖,或者它首先完全被破坏了。