我有一个彻底的搜索,但实际上找不到任何解决我面临的情况的事情(奇怪的是因为我认为这是很常见的事情). 背景 我正在使用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,并使用该值.