【问题标题】:MVC 5 Temp Data, Parse DataMVC 5 临时数据,解析数据
【发布时间】:2016-04-18 18:36:28
【问题描述】:

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

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

PetsController.CS:

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

然后我需要将该宠物对象移动到我的 messagesController:

// 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 新手。

【问题讨论】:

  • 尝试研究该错误。您使用哪个 ASP.NET 版本?
  • 我认为会话状态在您的 mvc 应用程序中已禁用。如果您使用的是 asp.net 5 和 mvc 6,那么这些链接将对您有所帮助。link1, link2
  • 我使用 ASP.NET 版本 5。
  • Thx Kartikeya,我克服了异常,错误是我没有正确声明会话依赖项。但现在我得到:处理请求时数据库操作失败。 InvalidOperationException:序列不包含任何元素。我怀疑这可能是我使用不正确的 TempData 方法。

标签: c# asp.net-mvc


【解决方案1】:

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");
}

之后我意识到我试图将数据发送到宠物对象中,然后数据库返回 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 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多