-1

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

Html剃须刀代码:-

@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

4 回答 4

2

您没有通过事件(因此没有取消它)。将代码更改为

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

或将其设为按钮

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

并删除e.preventDefault;

于 2016-02-04T10:09:27.370 回答
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!!!");
        }
    });
});
于 2016-02-04T10:09:34.650 回答
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!!!");
                    }

                });
            });
于 2016-02-04T11:04:18.160 回答
0

button将输入的类型更改为

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

您可以通过稍微更改代码来做到这一点

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

希望这可以帮助

于 2016-02-04T10:18:03.073 回答