【发布时间】:2013-04-23 22:21:29
【问题描述】:
以下是我的应用程序中的确切场景:
- 我在控制器操作中生成了一个 GUID。
- GUID 存储在 TempData 中。
- 我在从该控制器操作打开的剃刀视图 (MyView.cshtml) 中传递 GUID 和 ViewModel。
-
视图有一个与 GUID 绑定的隐藏字段。
@Html.HiddenFor(m => m.CustomGuid) -
还有另一个控制器操作返回一个 Json 结果,其中包含 TempData 中的 GUID 值。
[HttpGet] public ActionResult GetGuid() { string result = String.Empty; if (GetTempData("mGuid") != null) { result = GetTempData("mGuid").ToString(); } else { result = "INVALID_SESSION"; } return Json(result, JsonRequestBehavior.AllowGet); } 我在 MyView.cshtml 中编写了以下 jquery
$.get('@Url.Action("GetGuid", "Controller")', 函数(结果){
if (result.toString().toLowerCase() == $('#CustomGuid').val().toString().toLowerCase()) { alert('ok'); } else { alert('Invalid Identifier.'); window.location = '@Url.Action("ShowErrorPage", "Controller")'; return false; } });
问题是,它在 IE 和 Firefox 中运行良好,但它在 TempData 和 HiddenField 中总是有不同的 GUID,所以每次都会给出“无效标识符”的消息
可能是什么原因?为什么这种行为在 Chrome 中会有所不同?
【问题讨论】:
-
您应该检查 chrome 是否在两者之间没有对“某事”发出请求,因为 TempData 仅在下一个请求之前存在。您描述的行为(
GetGuid()返回"INVALID_SESSION")似乎无论如何都表明了这一点。 -
我尝试将警报放在 javascript 函数中,它显示 TempData 和 HiddenField 读数的不同 GUID,并且它们中的任何一个都没有显示“Invalid_Session”...
-
Chrome 是否有可能在两者之间发出请求,而 IE 和 Firefox 没有发出任何此类请求?
-
这就是我让你检查的,是的...如果 GetGuid 方法返回一个新的 GUID/不同的,那么这个不同的 GUID 什么时候设置?
-
每次调用控制器操作时都会设置一个新的 GUID。 (比如 Index 是设置新 GUID 并立即启动视图 (MyView.cshtml) 的主控制器操作。中间没有其他请求。
标签: asp.net-mvc google-chrome tempdata