繁体   English   中英

asp .net mvc ajax提交不覆盖表单发布

[英]asp .net mvc ajax submit is not overriding form post

我正在尝试使用ajax提交表单,但该表单不断发布两次。 一次使用FormCollection和输入,一次不使用输入。 我不确定自己在做什么错。 下面是我的表单,控制器方法和JavaScript。 我想通过ajax提交表单,以便可以使用JavaScript处理UI,并且如果可能的话,我想使用FormCollection或类似的集合。 请帮忙!

的JavaScript

$('#frmAddEdit').submit(function (e) {
    $('#alertFail').hide();

    var view = getUrlVars()["view"];
    var formData = $("#frmAddEdit").serialize();
    var token = $('input[name="__RequestVerificationToken"]', $("#frmAddEdit")).val();
    var formURL = $(this).attr('action');

    var isSubmitted = false;

    // ajax call to save data
    $.ajax({
        url: formURL,
        type: 'POST',
        dataType: 'json',
        data: { view: view, data: formData },
        success: function (response, status) {
            isSubmitted = response.data;
            if (isSubmitted == "true") {
                // switch the panels
                $('#pnlDetail').animate({ width: 'toggle' });
                $("#pnlGrid").delay(2000).animate({ width: 'toggle' });
                $('#alertSuccess').show();
                tblAdminGrid.ajax.reload();
            } else {
                $('#alertFail').show();
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $('#alertFail').show(); //something went HORRIBLY wrong!
        }
    });

    e.preventDefault();
})

视图

<form method="post" action="/Admin/Edit?view=@Request.QueryString["view"].ToString()"        id="frmAddEdit" class="panel form-horizontal">
    @Html.AntiForgeryToken()

    <div class="panel-heading">
        <span class="panel-title capitalize">@ViewBag.Title</span>
    </div>
    <div class="panel-body">
        <input type="hidden" id="hdnId" name="hdnId" value="0"/>

        @if (Request.Params["view"] != null || ViewBag.View != null)
        {
            string currentView = Request.Params["view"] == null ? ViewBag.View.ToString() : Request.Params["view"].ToString();

            @Html.Partial("~/Views/Shared/_" + currentView + ".cshtml");
        }
    </div>
    <div class="panel-footer text-center-lg">
        <button class="btn btn-default cancel" type="button">Cancel</button>
        <button class="btn btn-primary submit" type="submit">Submit</button>
    </div>
</form>

控制者

public JsonResult Edit(string view, FormCollection data)
{
    return Json(new
    {
        data = isSuccessful
    },
    JsonRequestBehavior.AllowGet);
}

我认为您正在双重提交。

您在#frmAddEdit上触发了一个jquery选择器,但是该表单上有一个按钮type =“ submit”。 因此,当您按下该按钮时,它将触发您的jquery,并使用输入按钮提交表单。 您应该拥有一个或另一个,而不要同时拥有。

我认为该框架使GET / PUT请求混合在一起。 尝试添加属性:

[HttpPost]
public JsonResult Edit(string view, FormCollection data)
{
    return Json(new { data = isSuccessful });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM