Ajax不会调用适当的操作

时间:2016-02-04 10:06:49

标签: jquery ajax asp.net-mvc razor jquery-ajaxq

我试图从html razor表单(在视图中)调用另一个操作而不是我的默认操作,但它总是调用默认方法。我使用jquery ajax但无法解决这个问题。我试过以下代码。

Html razor代码: -

@using (Html.BeginForm("InitialView", "AgreementRegistration", FormMethod.Post, new { id = "firstform", role = "form" }))
{

//Other Razor code

<input type="submit" value="Add Another" id="btnAddAnother" name="btnAddAnother" />

}

Jquery Ajax代码: -

 $(document).ready(function () {

$("#btnAddAnother").click(function(){
                e.preventDefault();
                var element = this;
                $.ajax({

                    url: "/AgreementRegistration/AddNew",
                    type: "POST",
                    data: JSON.stringify({ 'Options': someData }),
                    dataType: "json",
                    traditional: true,
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data.status == "Success") {
                            alert("Executed!!!");
                            $(element).closest("form").submit(); //Submit form
                        } else {
                            alert("Not Executed");
                        }
                    },
                    error: function () {
                        alert("error occured!!!");
                    }

                });
            });

 });

在此,如果我点击'AddAnother'按钮,它会调用默认的'InitialView'动作,我想改为调用'AddNew'动作。通过使用上面的jquery代码,它不会执行。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

您没有传递事件(因此不会取消它)。将代码更改为

$("#btnAddAnother").click(function(e) { // add the parameter
    e.preventDefault();
    ....

或将其设为按钮

<button type="button" id="btnAddAnother" name="btnAddAnother" />Add Another</button>

并删除e.preventDefault;

答案 1 :(得分:2)

您正在将事件挂钩到提交按钮的click事件,这意味着表单仍在使用标准POST方法提交。相反,您应该挂钩submit元素的form事件。试试这个:

$("#firstform").submit(function(e){
    e.preventDefault();
    var $form = $(this);

    $.ajax({
        url: $form.prop('action'),
        type: $form.prop('method'),
        data: { 'Options': someData },
        dataType: "json",
        traditional: true,
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            if (data.status == "Success") {
                alert("Executed!!!");
            } else {
                alert("Not Executed");
            }
        },
        error: function () {
            alert("error occured!!!");
        }
    });
});

答案 2 :(得分:1)

使用此代码如果您可以使用提交按钮以便提交页面,但您可以使用普通按钮,只有onclick事件函数调用,所以请使用以下代码...

CSHTML网页代码 -

@using (Html.BeginForm("InitialView", "AgreementRegistration", FormMethod.Post, new { id = "firstform", role = "form" }))
{

//Other Razor code

<input type="button" value="Add Another" id="btnAddAnother" name="btnAddAnother" />

}

脚本代码

$("#btnAddAnother").click(function(){
                e.preventDefault();
                var element = this;
                $.ajax({

                    url: "/AgreementRegistration/AddNew",
                    type: "POST",
                    data: JSON.stringify({ 'Options': someData }),
                    dataType: "json",
                    traditional: true,
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data.status == "Success") {
                            alert("Executed!!!");
                            $(element).closest("form").submit(); //Submit form
                        } else {
                            alert("Not Executed");
                        }
                    },
                    error: function () {
                        alert("error occured!!!");
                    }

                });
            });

答案 3 :(得分:0)

将类型更改为输入的button

<input type="button" value="Add Another" id="btnAddAnother" name="btnAddAnother" />

您可以通过稍微更改代码来实现此目的

$(document).ready(function () {
    $("#btnAddAnother").click(function(){
        var element = $(this);
        $.ajax({
            .
            .
        });
        return false;
    });
 });

希望这会有所帮助