我已经进行了彻底的搜索,但无法找到任何解决我面临的场景的答案(奇怪的是,因为我认为这是一个很常见的事情)。
背景
我正在使用ASP.NET MVC 4和Entity Framework 5 Code First创建应用程序。对于这个问题,可以将其视为具有帖子和用户的博客应用程序。
项目
帖子模型要求每个帖子都有相应的UserId。
使用ASP.NET MVC 4 Membership可以轻松找到已登录用户的用户名:
User.Identity.Name
。
这并不理想,我们需要ID,但是可以使用以下查询在数据库中搜索名称并获取ID:
db.UserProfiles.Single(a => a.UserName == User.Identity.Name);
问题
问题出现在尝试创建帖子时。Model.IsValid
为false,因为未从视图传递任何UserId。显然,因为不希望用户输入他们的ID。
我已经尝试将ID值放入ViewBag
并在视图中使用@Html.Hidden()
字段,但我没有成功。 Model.IsValid
始终返回false。
这些信息应该通过create view输入吗?还是应该直接在控制器中完成?这是一个相当令人沮丧的问题,因为我有这些信息,只需要弄清如何将其传递到模型中。
控制器代码
这基本上只是默认的脚手架代码。注释掉的代码是我尝试直接从控制器设置模型值的方式,但那只是试错。
//
// 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);
}