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

ASP.NET Core MVC接收JSON响应后页面跳转失效问题求助

问题根源与修复方案

1. 控制器模型绑定失败

你的POST方法接收EditPassword参数,但前端发送JSON格式数据时,ASP.NET Core默认不会自动将JSON绑定到模型,必须给参数添加[FromBody]特性,否则ModelState.IsValid会返回false,控制器直接返回success=false,导致跳转逻辑不触发。

修改控制器POST方法:

[HttpPost]
public async Task<IActionResult> EditPassword([FromBody] EditPassword formData)
{
    // 原有逻辑保持不变
}

2. Fetch请求URL路径错误

你使用了\\NameEmailTables/EditPassword,正确的URL应该是正斜杠开头的/NameEmailTables/EditPassword,反斜杠会导致请求路径异常,可能进入错误处理分支。

3. 前端代码语法错误

两段Fetch代码都存在语法问题:

  • 第一段代码中then回调里的if/else语句未闭合大括号,导致代码执行异常;
  • 第二段代码中第一个then的回调不是async函数,却使用await response.json(),且第二个then回调的if语句缺少大括号,语法错误会阻止逻辑执行。

4. 事件绑定优化

监听表单的submit事件比监听按钮click更可靠,能避免意外触发表单默认提交行为。


修正后的前端代码

<script>
document.addEventListener("DOMContentLoaded", function () {
    const form = document.querySelector("#form");
    form.addEventListener("submit", function (e) {
        e.preventDefault();
        
        let formData = {};
        let formElements = form.elements;
        for (let i = 0; i < formElements.length; i++) {
            let element = formElements[i];
            if (element.name) {
                formData[element.name] = element.value;
            }
        }
     
        fetch("/NameEmailTables/EditPassword", {
            method: "POST",
            headers: {
                'Content-Type': 'application/json',
                'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
            },
            body: JSON.stringify(formData)
        }).then(async response => {
            if (!response.ok) {
                throw new Error('Network response was not ok');
            }
            const res = await response.json();
            if (res.success) {
                window.location.href = "/NameEmailTables/";
            } else {
                document.getElementById("NewPasswordError").textContent = "The Old Password is wrong";
            }
        }).catch(error => console.error("An error occurred:", error));
    });
});
</script>

额外注意事项

  • ASP.NET Core默认启用AntiForgery验证,需要在表单内添加@Html.AntiForgeryToken(),并在Fetch请求headers中携带令牌,否则会返回400错误;
  • 控制器中UserId硬编码为1的逻辑需确认是否符合业务需求;
  • 密码禁止明文存储,建议使用PasswordHasher进行哈希加密,避免安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:08:15