我已经进行了彻底的搜索,但真的找不到任何解决我面临的场景的东西(奇怪的是,因为我认为这是一件很常见的事情)。
背景
我正在使用 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
为假,因为没有从视图传入 UserId。显然,因为不希望用户输入他们的 ID。
我尝试将 ID 值放入ViewBag
并使用@Html.Hidden()
视图中的字段,但是我没有成功。Model.IsValid
总是返回假。
是否应该通过创建视图输入此信息?还是应该直接在控制器中完成?这是一个非常令人沮丧的问题,因为我有信息并且只需要弄清楚如何将其传递到模型中。
控制器代码
这基本上只是默认的脚手架代码。注释代码是我尝试直接从控制器设置模型值的方式,但这只不过是反复试验。
//
// 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);
}