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

如何从Session获取当前用户ID填充CreatedBy与UpdatedBy字段

解决方案

嘿,我来帮你搞定这个问题!要从Session里取当前用户ID填充CreatedBy和UpdatedBy字段,其实操作起来很简单,咱们一步步来:

1. 在QuestionAnswer控制器中编写插入逻辑

首先,你需要在QuestionAnswerController里新增一个处理表单提交的POST方法,在这里完成从Session取数、实体赋值和数据插入的操作:

[HttpPost]
public ActionResult SubmitAnswer(QuestionAnswer model)
{
    // 先验证表单数据是否符合实体的注解规则(比如Question_Answer的长度要求)
    if (ModelState.IsValid)
    {
        // 从Session中获取当前登录用户的ID,注意要转换为int类型
        if (Session["UserId"] != null)
        {
            int currentUserId = Convert.ToInt32(Session["UserId"]);
            
            // 给实体的CreatedBy和UpdatedBy赋值
            model.CreatedBy = currentUserId;
            model.UpdatedBy = currentUserId;
            
            // 同时设置创建和更新时间为当前服务器时间,避免前端传值的误差
            model.CreatedDateTime = DateTime.Now;
            model.UpdatedDateTime = DateTime.Now;
            
            // 可以在这里设置其他默认字段值,比如IsMarkedAsAnswer默认未标记,Score初始为0
            model.IsMarkedAsAnswer = false;
            model.Score = 0;
            
            // 调用你的数据访问层(比如StackProvider)完成数据插入
            StackProvider provider = new StackProvider();
            provider.InsertQuestionAnswer(model);
            
            // 插入成功后跳转到首页或者对应的问题详情页
            return RedirectToAction("Homepage");
        }
        else
        {
            // 如果Session中没有UserId,说明用户未登录,跳转到登录页面
            return RedirectToAction("Login", "Account");
        }
    }
    
    // 如果表单验证失败,返回原页面并显示错误提示
    return View(model);
}

2. 确保视图表单正确绑定字段

你的页面里的文本框要正确绑定到Question_Answer字段,同时别忘了隐藏字段传递QuestionId(因为这个字段是关联问题的,通常从路由或者ViewBag获取):

@model QuestionAnswer

@using (Html.BeginForm("SubmitAnswer", "QuestionAnswer", FormMethod.Post))
{
    <div class="form-group">
        @Html.LabelFor(m => m.Question_Answer)
        @Html.TextAreaFor(m => m.Question_Answer, new { @class = "form-control", rows = 6 })
        @Html.ValidationMessageFor(m => m.Question_Answer, "", new { @class = "text-danger" })
    </div>
    
    <!-- 隐藏字段传递QuestionId,这里假设QuestionId是从ViewBag传过来的 -->
    @Html.HiddenFor(m => m.QuestionId, new { Value = ViewBag.QuestionId })
    
    <button type="submit" class="btn btn-primary">提交回答</button>
}

3. 额外的优化建议

  • 为了避免重复代码,你可以封装一个工具方法,专门用来从Session获取当前用户ID,比如写一个GetCurrentUserId()的扩展方法,这样多个控制器都能复用。
  • 如果你后续打算切换到ASP.NET Identity认证,也可以改用User.Identity.GetUserId()来获取用户ID,但目前你的Session方案完全适用。
  • 一定要检查Session是否存在UserId,防止未登录用户提交数据,保证数据的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:58