我创建了一个动作结果,允许restuarant将其菜单保存到数据库中。我的问题是我需要将menuID
用于另一个控制器,但是当我运行代码时,变量menuID
始终为0而不是刚刚添加到数据库中的值。
任何帮助都会感激不尽。
创建菜单操作结果
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(MenuViewModel model)
{
if (ModelState.IsValid)
{
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var currentUser = manager.FindById(User.Identity.GetUserId());
using (var objCtx = new ApplicationDbContext())
{
var currentrestaurant = (from r in objCtx.Restaurants
where r.UserID == currentUser.Id
select r).First<Restaurant>().id;
var menu = new Menu() { Name = model.Name, Restaurantid = currentrestaurant };
var menuID = menu.Id;
db.Menus.Add(menu);
db.SaveChanges();
return RedirectToAction("Create", "Meal", new { MenudID = menuID});
}
}
return View();
}
答案 0 :(得分:3)
很可能ID是在数据库中生成的。如果是这种情况,menu.Id
将在之后具有实际值,则将对象保存到DB,而不是之前。所以你需要重新排序你的代码:
var menu = new Menu() { Name = model.Name, Restaurantid = currentrestaurant };
db.Menus.Add(menu);
db.SaveChanges();
return RedirectToAction("Create", "Meal", new { MenudID = menu.Id});
旁注。确保最后一行中的参数拼写正确 - 不应该是MenuID
而不是MenudID
吗?