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
相关产品推荐
相关产品推荐

