【问题标题】:Ajax calls without AjaxHelper in aspnet core 2在asp net core 2中没有Ajax Helper的Ajax调用
【发布时间】:2026-01-18 20:35:01
【问题描述】:

我试图在我的 aspnet core 2.0 项目中使用“Ajax.BeginForm”实现一个异步调用,但后来我根据github* 上的这些线程发现,不支持此类在 aspnet 核心中,也不是 MVC 6。

除了旧的方法之外,还有其他方法可以在 aspnet 核心中使用 ajax 异步调用,使用 $.ajax 函数吗?我的问题是,使用AjaxHelper 类,我可以在视图文件中使用剃刀完成所有操作,并将所有内容组织在一个地方。

如果我必须在 js 文件中(或在 标签中)进行 ajax 调用,我为什么要使用 razor 语言来创建一个循环,并打印一个列表或其他任何东西?我可以直接处理数据,使用 js,并保留所有内容!

你们现在是如何解决这个问题的?感谢您的帮助。

【问题讨论】:

  • 如果需要,没有什么能阻止您将 ajax(和一般的 JS 脚本)放入视图文件中。 AFAIK Ajax.BeginForm 只是导致表单通过 ajax提交,而不是通过 ajax 填充。所以你仍然可以使用 Razor 来构建你的视图,然后只需编写你自己的 ajax 逻辑来提交表单。
  • Ajax.BeginForm 辅助方法向表单添加了一些 html5 数据属性,jquery.unobtrusive-ajax.min.js 中的代码将使用这些属性值并阻止正常的表单提交并改为执行 ajax 发布。你可以做同样的事情。您所需要的只是将数据属性添加到您的表单标签中。您还可以编写自己的 submit 事件处理程序并自己调用 ajax,这将为您提供 100% 的控制权。
  • @ADyson,这个想法不适用于 jquery 或 js 直接。在 js 文件中,或者在视图中,在
  • @Shyju 和 ADyson ,有一些示例或教程,说明如何在没有 ajaxHelper 类的情况下使用 html5 数据属性?大家觉得值得努力吗?还是我应该以传统方式工作?我刚开始学习aspnet core的项目,所以我还在决定怎么做。
  • 我正在研究同样的事情。试试看这里:dotnetthoughts.net/… 这几乎是 Core 中做旧 url ajax 助手 (ajax.BeginForm) 在 MVC 4 和 5 中所做的新方法。

标签: ajax razor asp.net-core-2.0 ajaxhelper


【解决方案1】:

这也让我有点困惑。我想我可爱的@Ajax 助手在哪里节省了我在 JS 地狱中的时间。

由于@sam 链接,他们已将 API 更改为更多 HTML 5 语义 - 不知道为什么,但可以

<form asp-controller="Home" asp-action="SaveForm"
    data-ajax-begin="onBegin" data-ajax-complete="onComplete"
    data-ajax-failure="onFailed" data-ajax-success="onSuccess"
    data-ajax="true" data-ajax-method="POST">
    <input type="submit" value="Save" class="btn btn-primary" />
    <div id="Results"></div>
</form>

你也可以在锚点上做同样的事情,不要忘记启用它的标签

<a data-ajax="true" data-ajax-begin="alert('Hello!')">TEST</a>

然后我想你可以为每个页面创建类似于 Angular 的 TypeScript 文件或每个站点一个 TypeScript,或者只是将脚本放在页面上,例如

var onSuccess = function(context){
    alert(context);
};

【讨论】:

  • 有什么方法可以将剃须刀页面方法设置为处理程序?
  • 您能再解释一下吗?我不明白您将剃须刀页面设置为处理程序是什么意思?处理程序是控制器,它将返回您需要的任何内容。就像渲染的 Razor 页面。只需创建一个新的 ActionResult 并将其作为 PartialView 返回。希望对你有帮助??