当前位置 : 主页 > 网络编程 > ASP >

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

来源:互联网 收集:自由互联 发布时间:2021-06-24
我有一个彻底的搜索,但实际上找不到任何解决我面临的情况的事情(奇怪的是因为我认为这是很常见的事情). 背景 我正在使用ASP.NET MVC 4和Entity Framework 5 Code First创建一个应用程序.出于此
我有一个彻底的搜索,但实际上找不到任何解决我面临的情况的事情(奇怪的是因为我认为这是很常见的事情).

背景

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

项目

帖子模型要求每个帖子都有相应的UserId.

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

User.Identity.Name.

这不是理想的,我们需要ID,但是像这样的查询可以在db中搜索名称并获取ID.

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

问题

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

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

是否应通过创建视图输入此信息?或者应该直接在控制器中完成?这是一个令人沮丧的问题,因为我有信息,只需要知道如何将其传递到模型中.

控制器代码

这基本上只是默认的脚手架代码.注释代码是我尝试直接从控制器设置模型值的方式,但这只是试验和错误.

//
    // 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);
    }
小心隐藏的字段.任何人都可以在该领域中放置他们想要的任何价值(即他们可以欺骗另一个用户).您最好在登录时缓存会话中的ID,并使用该值.
网友评论