使用带锚和按钮的AJAX调用控制器动作

时间:2017-06-01 19:06:54

标签: asp.net asp.net-mvc razor asp.net-core

我的控制器上有一个IActionResult,它通过AJAX返回一个部分视图:

master_sample.sort_values('Date') \
             .groupby('User ID', as_index=False)['Movie ID'] \
             .apply(' '.join)

如果我在Razor视图中添加[HttpGet] [Route("/propertycoverages/loss")] public IActionResult GetNewLoss() { return PartialView("_Loss"); } 标记,请执行以下操作:

<a>

<a asp-controller="PropertyCoverages" asp-action="GetNewLoss" id="loss-btn" data-ajax="true" data-ajax-update="losses" data-ajax-success="addLoss" data-ajax-method="GET">Add</a> 代码中生成以下HTML属性:<a>

它按预期工作,并在页面内返回局部视图。但是,如果我尝试使用按钮:

href="/propertycoverages/loss"

<button asp-controller="PropertyCoverages" asp-action="GetNewLoss" id="loss-btn" type="submit" data-ajax="true" data-ajax-update="losses" data-ajax-success="addLoss" data-ajax-method="GET">Add</button> 代码中生成以下HTML属性:<button>

我被重定向到formaction="/propertycoverages/loss"这不是我想要的。 我有没有办法让按钮的行为与/propertycoverages/loss标签相似?

注意:这些元素位于<a>内。我也尝试将<form><button>切换到type="submit",但控制器操作不会被调用。

2 个答案:

答案 0 :(得分:1)

您需要将JavaScript方法附加到按钮点击操作。

<button onclick="myFunction()">Click me</button>

在JS方法中,您可以回调动作获取HTML并在AJAX调用成功方法中放置页面。

    function onClick() {
    var url = [setURL];

        $.ajax({
            type: "GET",
            url: url,
            data: { },
            success: function (response) {
                $('#[setElementToReplace]').html(response);
            }
        });
    }

答案 1 :(得分:0)

您好主要有三种方法可以从提交按钮调用控制器操作。

Way1:使用简单表格

@using (Html.BeginForm("ActionName", "ControllerName"))
{
    <input type="submit" name="add" value="Add" />
    }

注意:默认情况下,这是一个获取请求,如果需要,您可以更改formmethod = post

方式2:使用html属性

 @using (Html.BeginForm())
{

 <input type="submit" name="add" value="Add" formaction="/anycontrollername/anyactionname" formmethod="get"
/>
}

方式3:使用jquery

  @using (Html.BeginForm())
{

 <input type="submit" name="add" value="Add" id=”save”
/>
}

$(document).ready(function () {

    $("#save").click(function () {
        $("form").attr("action", "/anycontroller /anyaction");
    });
});

似乎第二种方式适合您的要求,

希望上面的答案很有用。