asp.net-mvc - 如何将 userId 传递到模型 ASP.NET MVC 中?

标签 asp.net-mvc entity-framework

我已经进行了彻底的搜索,但真的找不到任何解决我所面临的情况的东西(奇怪的是因为我认为这是很常见的事情)。

背景

我正在使用 ASP.NET MVC 4 和 Entity Framework 5 Code First 创建一个应用程序。出于这个问题的目的,将其视为具有帖子和用户的博客应用程序。

项目

帖子模型要求每个帖子都有一个对应的 UserId。

使用 ASP.NET MVC 4 Membership 很容易找到登录用户的用户名

用户.Identity.Name

这并不理想,我们需要 ID,但是这样的查询可以在数据库中搜索名称并获取 ID。

db.UserProfiles.Single(a => a.UserName == User.Identity.Name);

问题

尝试创建帖子时出现问题。 Model.IsValid 为 false,因为没有从 View 传入 UserId。显然,因为不希望用户输入他们的 ID。

我已经尝试将 ID 值放入 ViewBag 并在 View 中使用 @Html.Hidden() 字段,但是我没有成功这个。 Model.IsValid 始终返回 false。

是否应该通过创建 View 输入此信息?还是应该直接在 Controller 中完成?这是一个非常令人沮丧的问题,因为我有信息并且只需要弄清楚如何将它传递到模型中。

Controller 代码

这基本上只是默认的脚手架代码。注释代码是我尝试直接从 Controller 设置模型值的方式,但这只不过是反复试验。

    //
    // POST: /Post/Create

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Post post)
    {
        if (ModelState.IsValid)
        {
            //var userId = db.UserProfiles.Single(a => a.UserName == User.Identity.Name);
            //post.User.UserId = userId.UserId;
            db.Posts.Add(post);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(post);
    }

最佳答案

小心隐藏字段。任何人都可以在该字段中输入他们想要的任何值(即他们可以欺骗其他用户)。您最好在登录时在 session 中缓存 ID,并使用该值。

关于asp.net-mvc - 如何将 userId 传递到模型 ASP.NET MVC 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15643808/

相关文章:

c# - Function 还是 async 可以细化吗?

asp.net-mvc - 使用 ASP.NET MVC 上的 ServiceStack 身份验证滑动 session 过期

JavaScript 文件在 IIS 上返回 404 Not Found

c# - 为什么 EF4 Code First 在存储对象时这么慢?

c# - 可切换数据访问层的结构

c# - Entity Framework 以一对多方式替换集合的正确方法

oracle - 如何在没有配置文件的情况下使用 Oracle Entity Framework

json - 使用ajax获取json数据时出现500错误

asp.net-mvc - 使用特定条件验证字符串字段的正则表达式

entity-framework - 添加没有 App.Config 的 DbProviderFactory