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

.NET Core 6.0中已弃用Microsoft.jQuery.Unobtrusive.Ajax,如何替代Ajax.BeginForm助手?

ASP.NET Core 6.0 替代 Ajax.BeginForm() 的方案

官方推荐方向

ASP.NET Core 中微软不再提供类似Ajax.BeginForm()的原生服务器端助手,推荐采用后端接口配合前端脚本的方式实现局部刷新,也可根据项目场景选择 Blazor 这类现代框架。

自定义 jQuery 实现局部刷新示例

1. 后端逻辑(Razor Pages 为例)

先准备处理表单提交的 PageModel,返回局部视图来更新页面指定区域:

public class FormPageModel : PageModel
{
    [BindProperty]
    public FormData Input { get; set; }

    public IActionResult OnPost()
    {
        if (!ModelState.IsValid)
        {
            // 验证失败时返回带错误信息的表单局部视图
            return Partial("_FormPartial", Input);
        }

        // 执行业务逻辑,比如数据存储

        // 操作成功返回结果局部视图
        return Partial("_ResultPartial", "提交成功");
    }

    public class FormData
    {
        public string Name { get; set; }
        public string Email { get; set; }
    }
}

2. 前端 Razor 页面代码

<!-- 表单渲染容器 -->
<div id="formWrapper">
    <partial name="_FormPartial" model="Model.Input" />
</div>

<!-- 结果展示容器 -->
<div id="resultWrapper"></div>

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
    $(document).on('submit', '#ajaxForm', function(e) {
        e.preventDefault(); // 阻止默认整页提交

        const $form = $(this);
        const submitUrl = $form.attr('action');
        const formData = $form.serialize();

        $.ajax({
            type: $form.attr('method'),
            url: submitUrl,
            data: formData,
            success: function(res) {
                // 根据返回内容判断更新区域
                if ($form.find('.validation-summary-errors').length) {
                    // 验证失败,更新表单区域
                    $('#formWrapper').html(res);
                } else {
                    // 提交成功,更新结果区域
                    $('#resultWrapper').html(res);
                    $form[0].reset(); // 可选:重置表单
                }
            },
            error: function() {
                $('#resultWrapper').html('<p class="text-danger">提交失败,请稍后重试</p>');
            }
        });
    });
</script>

3. 表单局部视图(_FormPartial.cshtml)

<form id="ajaxForm" method="post" asp-page="./FormPage">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    
    <div class="mb-3">
        <label asp-for="Name" class="form-label"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    
    <div class="mb-3">
        <label asp-for="Email" class="form-label"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
    
    <button type="submit" class="btn btn-primary">提交</button>
</form>

4. 结果局部视图(_ResultPartial.cshtml)

<div class="alert alert-success">
    @Model
</div>

其他可选方案

  • Blazor:若项目适合迁移到 Blazor(Server 或 WebAssembly),可通过组件绑定和事件处理实现无 Ajax 代码的局部更新,更贴合现代前端开发模式。
  • HTMX:轻量级第三方库,通过自定义 HTML 属性实现局部刷新,无需编写大量 JS 代码,适合追求简洁的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:33