在ASP.Net Core中,TempData是指在跨越请求时存储临时数据的字典。在控制器内执行TempData.Keep()方法可以使临时数据保持到下一个请求中。
但是,在使用AJAX调用时,由于请求的本质不同,TempData.Keep()方法不会生效。这可能导致在执行AJAX调用后,临时数据被清除,而无法在下一个请求中使用。
为了解决这个问题,可以通过在AJAX调用中使用JSON格式来存储和传递临时数据。
以下示例代码演示了如何使用AJAX调用并保留TempData:
在代码中,首先需要将临时数据存储到JSON对象中,然后在AJAX调用响应中将临时数据反序列化传回控制器中。最后,执行TempData.Keep()方法将临时数据保留到下一个请求中。
Controller:
public class MyController : Controller
{
public IActionResult Index()
{
TempData["MyData"] = "This is my temporary data.";
return View();
}
[HttpPost]
public IActionResult MyAjaxCall()
{
string json = Request.Form["data"];
dynamic myData = JsonConvert.DeserializeObject(json);
TempData["MyData"] = myData.myData;
TempData.Keep("MyData");
return Json(new { success = true });
}
}
JavaScript:
$(document).ready(function () {
$("#myButton").click(function () {
var myData = {
myData: "@TempData["MyData"]"
};
$.ajax({
type: "POST",
url: "/MyController/MyAjaxCall",
dataType: "json",
data: { data: JSON.stringify(myData) },
success: function (data) {
// do something...
},
error: function (xhr, status, error) {
// handle error...
}
});