You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6中如何实现.NET Framework的Ajax.BeginForm相同功能?

在.NET Core 6中实现原Ajax.BeginForm的功能

原代码通过Ajax.BeginForm实现了以下核心逻辑:以GET方式AJAX提交表单,用返回的HTML替换指定DOM元素,同时触发成功/失败回调。由于.NET Core 6移除了Ajax.BeginForm,可以通过原生表单+JavaScript实现完全等价的功能,具体方案如下:

1. 重构表单为标准HTML标签

将原Ajax.BeginForm替换为普通<form>,利用ASP.NET Core的标签助手生成正确请求地址:

<form id="searchForm" asp-action="Search" asp-controller="MainLayout" method="GET">
    @if (Model.ShowMore)
    {
        @Html.RenderPartial("Partials/SiteLayout/_ShowMore")
    }
</form>

若不使用标签助手,可直接写action="/MainLayout/Search"指定请求URL。

2. 编写AJAX提交处理逻辑

通过JavaScript拦截表单提交事件,模拟原AjaxOptions的行为:

方案一:使用jQuery(简化操作)

假设项目已引入jQuery,添加以下脚本:

$(function() {
    $("#searchForm").submit(function(e) {
        e.preventDefault();
        
        const $form = $(this);
        const targetSelector = "#searchResultsDivInPartialView";
        const requestUrl = $form.attr("action");
        const formData = $form.serialize();

        $.ajax({
            url: requestUrl,
            type: "GET",
            data: formData,
            success: function(response) {
                // 替换目标元素本身(对应InsertionMode.ReplaceWith)
                $(targetSelector).replaceWith(response);
                // 触发原成功回调
                typeof OnAjaxSuccess === "function" && OnAjaxSuccess();
            },
            error: function(xhr, status, err) {
                // 触发原失败回调
                typeof OnAjaxFailure === "function" && OnAjaxFailure(xhr, status, err);
            }
        });
    });
});

方案二:原生JavaScript(无依赖)

如果不想引入jQuery,用原生fetch实现:

document.addEventListener("DOMContentLoaded", function() {
    const form = document.getElementById("searchForm");
    form.addEventListener("submit", function(e) {
        e.preventDefault();
        
        const targetId = "searchResultsDivInPartialView";
        const url = this.action;
        const formData = new URLSearchParams(new FormData(this));

        fetch(`${url}?${formData}`, { method: "GET" })
            .then(res => res.text())
            .then(html => {
                // 替换目标元素本身
                document.getElementById(targetId).outerHTML = html;
                typeof OnAjaxSuccess === "function" && OnAjaxSuccess();
            })
            .catch(err => {
                typeof OnAjaxFailure === "function" && OnAjaxFailure(err);
            });
    });
});

3. 控制器端确认

确保MainLayout控制器的Search方法返回局部视图,这样AJAX请求能获取到用于替换的HTML片段:

public IActionResult Search(YourSearchModel model)
{
    // 处理搜索逻辑,获取结果
    var results = GetSearchResults(model);
    
    return PartialView("YourSearchResultsPartial", results);
}

内容的提问来源于stack exchange,提问作者MTplus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:52:54