MVC 5临时数据,解析数据

时间:2016-04-18 09:23:43

标签: c# asp.net-mvc

我试图将数据从一个控制器传递到另一个控制器。 我有一个宠物,我需要解析一个消息控制器。 基本上我有一个创建宠物的用户,然后其他用户可以通过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新手。

1 个答案:

答案 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指出我正确的方向。