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

Razor视图无法将用户输入数据提交至Action方法的问题

问题排查与解决方案

针对你遇到的表单无法提交数据到控制器Post方法的问题,可按以下步骤逐一排查修复:


1. 确保表单使用POST方法提交

你的提交按钮虽加了formmethod="post",但更稳妥的方式是直接在<form>标签上指定提交方法,避免浏览器兼容性问题:

<form asp-action="Register" asp-method="post">
    <!-- 原有表单内容 -->
</form>

2. 完善模型验证与绑定规则

给模型属性添加验证特性,既增强前端验证,也确保服务器端模型绑定的准确性:

using System.ComponentModel.DataAnnotations;

namespace BogusBooksStore.Models
{
    public class LoginModel
    {
        [Required(ErrorMessage = "请输入密码")]
        public string Passw { get; set; } = null!;

        [Required(ErrorMessage = "请输入邮箱")]
        [EmailAddress(ErrorMessage = "请输入有效的邮箱地址")]
        public string Email { get; set; } = null!;
    }
}

3. 检查控制器模型绑定状态

在Post方法开头先验证模型状态,快速排查绑定失败原因:

[HttpPost]
public async Task<IActionResult> Register(LoginModel login)
{
    // 先检查模型绑定是否有效
    if (!ModelState.IsValid)
    {
        return View(login);
    }

    try
    {
        await auth.CreateUserWithEmailAndPasswordAsync(login.Email, login.Passw);
        var fbAuthLink = await auth.SignInWithEmailAndPasswordAsync(login.Email, login.Passw);
        string currentUserId = fbAuthLink.User.LocalId;

        if (currentUserId != null)
        {
            HttpContext.Session.SetString("currentUser", currentUserId);
            return RedirectToAction("Books", "Index");
        }
    }
    catch (FirebaseAuthException ex)
    {
        var firebaseEx = JsonConvert.DeserializeObject<FirebaseErrorModel>(ex.ResponseData);
        ModelState.AddModelError(String.Empty, firebaseEx.error.message);
        return View(login);
    }

    return View();
}

4. 验证Session中间件配置

控制器中使用了HttpContext.Session,需确保在Program.cs中正确配置Session中间件:

// 添加Session服务
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(30);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});

// 配置中间件顺序(在UseRouting之后,UseAuthorization之前)
app.UseRouting();
app.UseSession(); // 必须放在这里
app.UseAuthorization();

5. 确认AntiForgeryToken存在

ASP.NET Core默认会为表单生成防跨站请求伪造令牌,但需确保视图中已正确生成。可手动添加令牌到表单内,或确认_ViewImports.cshtml中包含TagHelper引用:

<!-- 手动添加令牌到form标签内 -->
@Html.AntiForgeryToken()

_ViewImports.cshtml需包含:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:35:27