2

現在、フォームは ASP.NET と AJAX を介して送信されていますが、AJAX を介してのみ送信したい (臭いがするので Ajax.BeginForm を使用したくない)。

多かれ少なかれ、関連する要素だけにフォームからデータを取り除いたことに注意してください。

    @using (Html.BeginForm("Action", "Controller", FormMethod.Post))
    {
    <div style="width:275px;">
        <a href="#" id="edit_licenses" class="grayBtn left">Edit</a>
        <a href="#" id="cancel_licenses" style="display:none;" class="grayBtn left">Cancel</a>
        <input id="submit_licenses" type="submit" style="display:none;" value="Save" class="redBtn right" />
    </div>
    }
    <br />
</div>

<script type="text/javascript">
    $('#edit_licenses').click(function () {
        swap_licenses(false);
        return false;
    });

    $('#cancel_licenses').click(function () {
        swap_licenses(true);
        $('form').resetForm();
        return false;
    });

    $('form').submit(function (e) {
        if ($(this).valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {

                }
            });
        }
        return false;
    });

    var swap_licenses = function (bool) {
        $('.licenses').each(function () { $(this).attr('disabled', bool); });
        $('#submit_licenses, #edit_licenses, #cancel_licenses').toggle();
    }
</script>
4

2 に答える 2

4

preventDefault通常のフォーム送信を防止するメソッドを使用してみましたか?

$(function(){ 

   $('#submit_licenses').click(function (e) {
        e.preventDefault();
        var _this=$(this);
        swap_licenses(false);           
        PostForm(_this.closest("form"));
   });

});

function PostForm(postedForm)
{
   //postedForm will be the form object here. You may do your validation here

     $.ajax({
              url: postedForm.attr("action"),
              type: postedForm.attr("method"),
              data: postedForm.serialize(),
              success: function (result) {               
            }
      });
 }

function swap_licenses(someParameter)
{
   //This method does something useful
}

フォーム送信イベントのイベント ハンドラーは既に送信ボタンにバインドされているため、必要ありません。

また、フォームの送信/投稿は常に HTTP Postメソッドである必要があります。PostFormしたがって、このようにメソッドを単純化できます

function PostForm(postedForm)
{
    $.post(postedForm.attr("action"),postedForm.serialize(),function(data){
       //do something with the response
    });          
 }
于 2013-01-25T21:02:57.673 に答える
2

私の意見では、これは送信ボタンを使用しているためです。それをタイプボタンに変換すると、完全に機能します。

于 2013-01-27T06:07:30.340 に答える