我试图将数据从一个控制器传递到另一个控制器。 我有一个宠物,我需要解析一个消息控制器。 基本上我有一个创建宠物的用户,然后其他用户可以通过WebAPP向其他宠物主人发送消息。 在宠物/细节我有一个按钮调用动作SendMessage(如下所示)
目前我收到一个未处理的异常:InvalidOperationException:尚未为此应用程序或请求配置Session。 Microsoft.AspNet.Http.Internal.DefaultHttpContext.get_Session()
PetsController.CS:
Parcelable savedRecyclerLayoutState = getArguments().getParcelable(utilities.BUNDLE_RECYCLER_LAYOUT);
manager.onRestoreInstanceState(savedRecyclerLayoutState);
recyclerView.setAdapter(
recyclerView.setLayoutManager(manager);
然后我需要将该pet对象移动到我的messagesController:
public IActionResult SendMessage(int id)
{
Pet PetData = _context.Pet.Single(m => m.ID == id);
TempData["PetData"] = PetData;
return RedirectToAction("Create", "Message");
}
我希望有人可以帮我解决这个问题。 只是提一下,我是MVC新手。
答案 0 :(得分:0)
TempData方法只返回单个值,我的错误是我试图将TempData [" PetData"]发送到Pet对象,因此它返回null,因为它只返回单个值而不是孔对象
修正: 添加到Project.JSON,恢复了pakages
"Microsoft.AspNet.Session": "1.0.0-*"
添加到startup.cs ConfigureServices
services.AddSession();
services.AddCaching();
然后我改革了用于将用户发送到/ Messages / create
的方法public IActionResult SendMessage(int id)
{
Pet PetData = _context.Pet.Single(m => m.ID == id);
TempData["PetOwner"] = PetData.CreatedBy;
TempData["PetName"] = PetData.Name;
return Redirect("/Messages/Create");
}
之后我意识到我试图将数据发送到Pet Obejct,然后DB返回Null Not Allowed。
然后我改革了创建消息方法
// POST: Messages/Create
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Message message)
{
if (ModelState.IsValid)
{
_context.Message.Add(message);
string PetOwner = TempData["PetOwner"].ToString();
string PetName = TempData["PetName"].ToString();
message.SentTo = PetOwner;
message.Subject = PetName;
message.DateSent = System.DateTime.Now;
message.SentBy = User.Identity.Name;
message.Read = false;
_context.SaveChanges();
return RedirectToAction("Index");
}
return View(message);
}
感谢Kartikeya Khosla指出我正确的方向。