You need to enable JavaScript to run this app. 为何ASP.NET Core Razor页面仅向控制器传递Email、Password两个会员字段?
优惠活动
大模型
产品
解决方案
定价
更多

为何ASP.NET Core Razor页面仅向控制器传递Email、Password两个会员字段?

两种实现方案的具体落地方式

方案一:页面额外提交isDesigner布尔字段

这种方式不需要改动后端数据库查询逻辑,只需要在Razor表单内新增隐藏域,随表单一起提交字段值:

  • 确保你的Member实体类已经定义了isDesigner这个布尔类型属性
  • 在cshtml的<form>标签内部、提交按钮上方新增一行隐藏域代码:
<input asp-for="isDesigner" type="hidden" />

表单提交时,这个字段会自动通过模型绑定传入后端的Index(Member member)方法的入参里,可直接通过member.isDesigner读取值。

注意:所有前端页面提交的字段都可以被恶意篡改;且登录页初始加载时,并没有拿到对应用户的真实isDesigner值,隐藏域传的只是模型默认值,无法匹配不同用户的真实身份标识,开发成本和风险都远高于直接从数据库查询的方式,不推荐在权限相关的场景使用。

方案二:控制器根据提交的Email从数据库查询isDesigner(推荐)

这种方式的字段值完全来自数据库权威数据源,不存在前端篡改的风险,也不需要改动前端cshtml的代码结构,只需要调整控制器内的登录校验逻辑即可:
原来的登录逻辑用Where().Any()只能判断有没有匹配的账号,拿不到具体的用户实体信息,改成先查出匹配的用户实体,即可直接获取isDesigner字段值:

[HttpPost]
public ActionResult Index(Member member)
{
    // 根据提交的Email查询数据库中对应的用户实体
    var validUser = _context.Members.FirstOrDefault(x => x.Email == member.Email);
    // 校验用户存在性和密码正确性
    if (validUser != null && validUser.Password == member.Password)
    {
        // 此处可直接读取validUser.isDesigner的值,完成后续业务逻辑
        // 例如根据isDesigner值做权限跳转、身份赋值等操作
        return Redirect("/Product");
    }
    else
    {
        TempData["Message"] = "Invalid user";
        return View();
    }
}

这种方式的额外优势是:一次数据库查询即可拿到用户的全量关联字段,不需要为了取isDesigner单独再查一次数据库,性能更优,也更符合权限校验的安全规范。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 03:15:04