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

ASP.NET Core 5通过函数提交表单时data-ajax属性不生效问题

问题原因及解决方案

1. 为什么调用submit()不识别data-ajax相关属性

jquery.unobtrusive-ajax 库的核心实现逻辑是给所有标注 data-ajax="true" 的表单绑定了submit事件拦截器,会拦截默认的表单提交行为,读取表单上的所有data-*属性构造异步请求,完成局部更新逻辑。
你通过自定义函数调用 $("#rawform").submit() 时走的是原生表单提交逻辑,没有触发unobtrusive-ajax绑定的事件拦截,本质是因为原生HTMLFormElement的submit()方法不会触发submit事件,因此拦截逻辑不会执行,最终表现为直接跳转到服务端返回的新页面。

修复方案

把你的提交函数改成手动触发submit事件即可,unobtrusive-ajax的拦截逻辑会正常生效:

function doAjax4() {
    $("#rawform").trigger("submit");            
}

2. $.ajax()请求添加防伪验证令牌的方法

ASP.NET Core默认要求POST请求携带防伪令牌,你可以通过两种方式实现:

方式一:序列化表单内容自动携带

只要你的表单内添加了@Html.AntiForgeryToken()(Razor语法),框架会自动生成隐藏的__RequestVerificationToken字段,序列化表单时会自动带上该字段:

$.ajax({
    url: '/Test/_PartOfView',
    type: 'POST',
    data: $('#rawform').serialize(), // 自动包含防伪令牌和表单所有字段
    success: function (res) {
        $('#ajupd').html(res); // 手动替换局部内容
    }
});

方式二:手动提取令牌放到请求头

如果是自定义参数不序列化完整表单,可以单独提取令牌放到请求头:

// 提取页面中生成的防伪令牌
var verifyToken = $('input[name="__RequestVerificationToken"]').val();
$.ajax({
    url: '/Test/_PartOfView',
    type: 'POST',
    headers: {
        'RequestVerificationToken': verifyToken
    },
    data: { aVal: '自定义传入的参数' },
    success: function (res) {
        $('#ajupd').html(res);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:54:00