Intermittent results with ASP.NET MVC TempData - sometimes it loses it's value
在ASP.NET MVC应用程序中,我有一个控制器操作,该操作调用业务层以添加实体。
如果由于商业原因而无法添加实体,则将Error属性以及描述设置为true。
如果为true,则将错误消息设置为
这是我的控制器中的相关代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var added = ModelHelper.CreateSessionCode(model); if(added.Error) { TempData["SessionCodesMessage"] = model.ErrorDescription; TempData["MessageClass"] ="alert-danger"; } else { TempData["SessionCodesMessage"] ="Created session code"; TempData["MessageClass"] ="alert-success"; } return RedirectToAction("Index"); |
然后在我看来,我有以下代码:
1 2 3 4 5 6 7 | @if (TempData["SessionCodesMessage"] != null) { @(TempData["SessionCodesMessage"]) } |
该消息是否显示似乎不一致。这可能是浏览器缓存问题或类似问题吗?通过逐步执行代码,我可以确定执行是否取决于添加实体的结果进入了两个控制器条件块。
好吧,
如果要保留TempData值,则可以使用Keep:
1 | TempData.Keep() |
在您的情况下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var added = ModelHelper.CreateSessionCode(model); if(added.Error) { TempData["SessionCodesMessage"] = model.ErrorDescription; TempData.Keep("SessionCodesMessage"); TempData["MessageClass"] ="alert-danger"; TempData.Keep("MessageClass"); } else { TempData["SessionCodesMessage"] ="Created session code"; TempData.Keep("SessionCodesMessage"); TempData["MessageClass"] ="alert-success"; TempData.Keep("MessageClass"); } return RedirectToAction("Index"); |
或
如果要在每次删除时都将其明确显示而不删除它,也可以使用Peek。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var added = ModelHelper.CreateSessionCode(model); if(added.Error) { //second request, PEEK value so it is not deleted at the end of the request TempData["SessionCodesMessage"]; ="Created session code"; object sessioncodevalue= TempData.Peek("SessionCodesMessage"); TempData["MessageClass"]; ="alert-success"; object messageclassvalue= TempData.Peek("MessageClass"); } else { //second request, PEEK value so it is not deleted at the end of the request TempData["SessionCodesMessage"]; ="Created session code"; object sessioncodevalue= TempData.Peek("SessionCodesMessage"); TempData["MessageClass"]; ="alert-success"; object messageclassvalue= TempData.Peek("MessageClass"); } return RedirectToAction("Index"); |
当您始终希望保留另一个请求的值时,可以使用
有关这些功能以及如何在