【问题标题】:Calling a controller action using AJAX with an anchor vs a button使用带有锚点和按钮的 AJAX 调用控制器操作
【发布时间】:2017-06-01 19:06:54
【问题描述】:

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

[HttpGet]
[Route("/propertycoverages/loss")]
public IActionResult GetNewLoss()
{
    return PartialView("_Loss");
}

如果我在 Razor 视图中添加<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>

&lt;a&gt; 标签中生成以下 HTML 属性: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>

&lt;button&gt; 标签中生成以下 HTML 属性:formaction="/propertycoverages/loss"

然后我被重定向到/propertycoverages/loss,这不是我想要的。 有没有办法让按钮的行为类似于&lt;a&gt; 标签

注意:这些元素位于 &lt;form&gt; 中。我还尝试将&lt;button&gt;type="submit" 切换到type="button",但没有调用控制器操作。

【问题讨论】:

  • @AgamBanga 我尝试将按钮更改为 type="button" 但是当我单击按钮时没有任何反应。不会调用控制器操作。
  • 为什么不给你的按钮再次点击附加一个JS方法。在JS方法中可以回调到AJAX调用成功方法中获取HTML并放置在页面上的动作吗?
  • @DerekHackett 这可能是我需要做的。谢谢。
  • @RyanBuening 让我知道这是否有效。如果是,我会将其添加为您选择的答案。

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


【解决方案1】:

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

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

在JS方法中可以回调action获取HTML并放在页面中的AJAX调用成功方法中。

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

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

【讨论】:

    【解决方案2】:

    您好,从提交按钮调用控制器动作主要有三种方式。

    方式一:使用简单的表单

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

    注意:默认是get请求,如果需要可以修改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");
        });
    });
    

    看来第二种方式适合你的要求,

    希望以上答案有用。

    【讨论】:

    • 当我想进行 AJAX 调用并停留在页面上时,我认为我的按钮不能为 type="submit"。我想我需要做一些类似于 Derek 上面建议的事情并附加一个 JS 方法。谢谢。
    猜你喜欢
    • 2015-04-16
    • 2011-01-31
    • 2018-11-26
    • 2017-02-19
    • 2018-08-24
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多