【问题标题】:Can't access TempData during ajax request?在 ajax 请求期间无法访问 TempData?
【发布时间】:2015-11-19 12:31:10
【问题描述】:

为什么我们无法在 ajax 请求期间访问 TempData。

控制器:

TempData["MytempData"] = MyMessage;
return Json(true, JsonRequestBehavior.AllowGet)

查看:

$.ajax(
{
type: 'POST',
success: function (result) {
value=TempData["MytempData"];//why this is not possible
},
});

我也知道我可以使用 json 对象访问这些数据,如下

return Json(new {isSucess=true,Message=MyMessage},JsonRequestBehavior.AllowGet)

但我的问题不在于我应该如何将数据从控制器传递到视图。我只是想知道在 ajax 请求期间我们无法访问 TempData 的原因。

【问题讨论】:

  • 你混淆了 Javascript 代码和 C# 代码。
  • @SLaks 1.当我们重新加载整个页面时,会执行 tempdata 行 2. 当发送 ajax 请求时,tempdata 行也会在服务器端执行。在这两种情况下都会执行 tempdata 行。我们在第一种情况下得到值,但在第二种情况下没有。为什么?
  • TempData 在 JS 代码中首先不存在。您需要发送和读取 HTTP 响应。
  • Razor 代码在发送到客户端之前在服务器上进行评估。 var value 的值将是 TempData["MytempData"] 的初始值。除非您在 ajax 调用中向客户端发送新值,否则它永远不会更改,因为页面没有重新加载。

标签: c# asp.net ajax json asp.net-mvc


【解决方案1】:

razor 编译器会将value=TempData["MytempData"] 视为 javascript,并且不会尝试将其编译为 C#。要告诉 razor 它是 C#,您需要在前面加上 @

$.ajax(
{
type: 'POST',
success: function (result) {
value=@TempData["MytempData"];//Should work now.
},
});

但请记住,这将是 object 类型,因此您可能希望也将其转换。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多