将值附加到URL

时间:2016-03-25 13:19:01

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

我有一个由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;
&#13;
&#13;

对于表单验证和提交,我使用JqueryValidation.org

中的JqueryValidation插件

有时当我点击提交时,userName和密码会附加到查询字符串。

所以,如果你有一个像http://localhost/Home/Index这样的网址,那就变成了 http://localhost/Home/Index/?UserName=blah&Password=blah

我怀疑它必须使用JqueryValidation插件执行某些操作,但我无法在问题页面中找到任何相关内容here

1 个答案:

答案 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中,jQuery Validate插件由包含的Unobtrusive Validation插件自动初始化。如果是这种情况,则无法直接调用.validate()方法,因为Unobtrusive Validation插件会根据HTML标记中的数据属性自动构造并调用.validate()。 jQuery Validate插件将仅使用.validate()的第一个实例,并完全忽略任何后续调用。

移除您对.validate()的来电以验证此操作。如果没有任何变化,那么你就会知道ASP内置的Unobtrusive Validation会被覆盖,或者它首先完全被破坏了。