jquery提交表单和查询字符串问题

时间:2013-08-05 01:43:07

标签: jquery asp.net-mvc asp.net-mvc-4 razor jquery-2.0

我在表单页面的查询字符串上有一些值。当我使用提交按钮提交表单时,我自己可以获取查询字符串值,但是当我使用jquery提交表单时,如下所示。我再也看不到查询字符串值了。我搞乱了吗?

      $('#PasswordResetForm').submit(function () {

         if (some conditions) {
            $('#PasswordResetForm').submit();
         }
         else {             
            return false;
         }
      });

链接是这样的:

 http://websitename/Account/PasswordReset/?username=username&token=ZnsHnVh3oIOwOR2GUaGfsA2

html代码如下:

@using (Html.BeginForm("PasswordReset","Account",FormMethod.Post,new        
                                                      {id="PasswordResetForm"}))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary("", new { id = "validation" })

    <fieldset>
        <legend ">Enter your User Name</legend>

        <br />

        <table id="MainTable" border="0">
            <tr class="MainTr">
                <td class="FirstTd">
                    @Html.Label("User Name")
                </td>
                <td class="SecondTd">

                </td>

            </tr>
            <tr class="MainTr">
                <td class="FirstTd">
                    New Password
                </td>
                <td class="SecondTd">
                    @Html.Password("newPassword")
                </td>

            </tr>
            <tr class="MainTr">
                <td class="FirstTd">
                    Confirm New Password
                </td>
                <td class="SecondTd">
                    @Html.Password("confirmNewPassword")
                </td>

            </tr>                
            <tr class="MainTr">                                        
                <td colspan="2">
                    <input type="submit" id="submitBt" value="Recover Password" />
                </td>                    
            </tr>
        </table>
    </fieldset>
}

我再也看不到服务器上的令牌了。当我使用jquery提交表单时。 我正在使用mvc 4和jquery 2.0.0

6 个答案:

答案 0 :(得分:1)

使用以下代码:

$('#PasswordResetForm').submit(function () {
    if (some conditions) {
        this.submit();
    }
    else {             
        return false;
    }
});

调用$('#PasswordResetForm').submit();再次调用相同的函数。不要将它包装为jquery对象。

保留查询字符串,将查询字符串设置为隐藏元素:

@Html.Hidden("username", Request.QueryString["username"])
@Html.Hidden("token", Request.QueryString["token"])

答案 1 :(得分:1)

使用JavaScript的位置对象的搜索属性(即location.search)可以使用查询字符串参数。从那里,您可以在提交功能中使用它。

e.g。 http://somesite.com/?querystringParam1=someVal&querystringParam2=someOtherVal

location.search会等于吗?querystringParam1 = someVal&amp; querystringParam2 = someOtherVal

如果在像NameValueCollection这样的.NET中需要查询字符串,我写了一个快速的JSFiddle,http://jsfiddle.net/nickyt/NnyV2/5/

(function() {
    function getQuerystringAsNameValueCollection(querystring) {
       var querystringKeyValuePairs = querystring.split('&');
       var querystringHashTable = {};

       for (var index = 0; index < querystringKeyValuePairs.length; index++) {
           var keyValue = querystringKeyValuePairs[index].split('=');
           querystringHashTable[keyValue[0]] = keyValue[1];
       }
    }

    $('#PasswordResetForm').submit(function (e) {
             var querystring = getQuerystringAsNameValueCollection(location.search.substring(1));

             if ("token" in querystring) { // Do more checks on the token if necessary
                $('#PasswordResetForm').submit();
             }
             else {             
                e.preventDefault();
             }
          });
})();

答案 2 :(得分:1)

试试这个

$(function()
{

    function  ValidateData() {
             if (some conditions) {
                return true;
             }
             else {             
                return false;
             }
          }
});

HTML更改

 <input type="submit" id="submitBt" value="Recover Password" onClick="return ValidateData();" />

答案 3 :(得分:0)

$('#PasswordResetForm').submit(function (e) {
    e.preventDefault();
    if (some conditions) {
        this.submit();
    }
    else {             
        return false;
    }
});

答案 4 :(得分:0)

还可以使用jquery的.on click事件监听器,如

$('#PasswordResetForm').on('click', function() { 
   //code here.....
});

其他知识。 :)

答案 5 :(得分:-1)

这没有任何意义:

$('#PasswordResetForm').submit(function () {
   $('#PasswordResetForm').submit();
}

因为你再次举起活动。

你只需要返回true,即:

$('#PasswordResetForm').submit(function () {
   if (cond)
      return true;
   return false;
}

http://api.jquery.com/submit/