MVC 5 Temp Data, Parse Data

本文关键字:Data Parse Temp MVC | 更新日期: 2024-09-25 09:23:32

我试图将数据从一个控制器传递到另一个控制器。我有一个宠物,我需要解析到一个消息控制器。基本上,我有一个创建宠物的用户,然后其他用户可以通过WebAPP向其他宠物主人发送消息。在宠物/详细信息上,我有一个按钮调用动作SendMessage(如下所示)

当前我得到一个未处理的异常:InvalidOperationException:尚未为此应用程序或请求配置会话。Microsoft.AspNet.Http.Interal.DefaultHttpContext.get_Session()

宠物控制器.CS:

public IActionResult SendMessage(int id)
        {
            Pet PetData = _context.Pet.Single(m => m.ID == id);
            TempData["PetData"] = PetData;
            return RedirectToAction("Create", "Message");
        }

然后我需要将宠物对象移动到我的消息Controller:

// POST: Messages/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Create(Message message)
        {
            if (ModelState.IsValid)
            {
                _context.Message.Add(message);
                Pet Data = TempData["PetData"] as Pet;
                message.SentTo = Data.CreatedBy;
                message.Subject = Data.Name;
                _context.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(message);
        }

我希望有人能帮我解决这个问题。我是MVC的新手。

MVC 5 Temp Data, Parse Data

TempData方法只返回单个值,我的错误是我试图将TempData["PetData"]发送到Pet对象中,因此它返回null,因为它只返回一个值,而不返回孔对象。

修复:添加到Project.JSON,恢复了包装

"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为我指明了正确的方向。

相关文章: