【问题标题】:AJAX - Post to MVC Controller method without reloading pageAJAX - 发布到 MVC 控制器方法而不重新加载页面
【发布时间】:2018-11-15 17:45:15
【问题描述】:

我创建了一个 MVC 视图页面,当用户单击一个按钮时,会调用一个控制器方法。该方法返回一个文本表达式。然后,此表达式将显示在弹出消息中。

单击按钮时弹出功能起作用,但是它具有导致页面重新加载的不良副作用。有没有办法防止这种情况发生?

这是呈现按钮的 HTML:

<button id="btnListGroups" title="List the groups the selected service ID is a member of">List Groups</button>

这里是 JavaScript:

$(function () {
    $("#btnListGroups").click(function () {
        var val = $("#ddlServiceID").val();
        $.post("/Home/GetGroups", { serviceID: val }, function (data, textStatus) 
        {
            alert(data);
        });
    });
})

最后,这是 Controller 方法:

public partial class HomeController : Controller
{
    public MvcHtmlString GetGroups(string serviceID)
    {
        ADHandler adHandler = new ADHandler();

        string groups = adHandler.GetGroupMemberships(serviceID);
        return new MvcHtmlString(groups);
    } 
}

【问题讨论】:

  • 除非它连接到表单,否则不应通过基本按钮单击发生这种情况。您是否尝试添加 event.preventDefault();到js函数?
  • 您的按钮在表单内吗?使用preventDefault
  • @SeanLeroy - 谢谢!是的,按钮存在于表单块中。添加 event.preventDefault();到 .click 函数解决了这个问题。
  • 别忘了在你的项目中从 nuget manager 安装 query.unobtrusive-ajax 包。

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

由于按钮存在于 HTML 表单中,正在重新加载页面。默认情况下,除非另有说明,否则 HTML 按钮的“类型”属性为“提交”。由于我没有为按钮指定“类型”,因此单击按钮被解释为表单提交。

为了解决这个问题,我将按钮的类型属性设置为“按钮”

<button type="button" id="btnListGroups" title="List the groups the selected service ID is a member of">List Groups</button>

【讨论】:

  • 另外,<button /> "type" 的默认值是提交;如果您将按钮定义为<button type="button" .. />,它也不会回发。
  • @MikeBruno 为 Brian 的解决方案 +1,因为我认为它更简洁
猜你喜欢
  • 2019-04-18
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2012-12-15
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
相关资源
最近更新 更多