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 回答