[英].NET Core MVC Can Ajax Redirect Page with Model
我正在使用ajax将我的数据从前端发布到后端控制器,我期望控制器生成一个模型并使用该模型重定向一个新的视图; 但它永远不会被重定向。 是否可以在控制器内部重定向? 不是阿贾克斯?
我查看了一些其他线程,说需要在 Ajax Success 函数中编写重定向代码,它可以工作,但我无法将模型传递给新视图。 有什么办法可以通过ajax重定向单独传递模型吗? (我无法通过 URL 传递我的数据,因为数据量有点大)。 请指教,先谢谢了。
控制器方法:
public IActionResult Input([FromBody] IEnumerable<HistTable> Input)
{
//Some Code
return View("/views/test/test.cshtml", model);
}
阿贾克斯:
$.ajax({
type: "POST",
url: "/test/input",
dataType: "json",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (e) {
//How to pass the model?
//window.location.replace(link);
}
});
是否可以在控制器内部重定向? 不是阿贾克斯?
事实上,如果完全抛开ajax,真正的重定向操作只能在控制器内部实现。
你应该通过以下两种方式结合ajax和controller来实现它: TempData或Session来实现这个功能。
并注意,由于您传递的是多条数据,请在存储之前将它们serialize
化为json,并通过deserialization
获取它们。
这样,通过controller中的session传递数据,然后在ajax中的success函数中重定向到test视图。
首先在核心项目的startup.cs文件中启用Session
。
然后,使用以下代码:
public IActionResult Test(List<Employee> model)
{
if (HttpContext.Session.GetString("model") != null)
{
model = System.Text.Json.JsonSerializer.Deserialize<List<Employee>>(HttpContext.Session.GetString("model"));
}
return View(model);
}
public IActionResult Input([FromBody] List<Employee> Input)
{
//Some Code
HttpContext.Session.SetString("model", System.Text.Json.JsonSerializer.Serialize(Input));
return Content("/test/test");
}
阿贾克斯:
$.ajax({
type: "POST",
url: "/Test/input",
//dataType: "json",
data: JSON.stringify(
[{ Id: 1, FirstName: 'a', LastName: 'v', Gender: 'male' },
{ Id: 2, FirstName: 'b', LastName: 'v', Gender: 'female' },
{ Id: 3, FirstName: 'c', LastName: 'v', Gender: 'male' }]),
contentType: "application/json; charset=utf-8",
success: function (e) {
window.location.replace(e);
}
});
首先,您需要通过TempData["data"]
从 Input 到 Test action 通过RedirectToAction("test")
传递模型,因为您要传递多个数据。
public IActionResult Test(List<Employee> model)
{
if (TempData["data"] != null)
{
model = System.Text.Json.JsonSerializer.Deserialize<List<Employee>>(TempData["data"].ToString());
TempData.Keep();
}
return View(model);
}
public IActionResult Input([FromBody] List<Employee> Input)
{
//Some Code
TempData["data"] = System.Text.Json.JsonSerializer.Serialize(Input);
return RedirectToAction("test");
}
阿贾克斯:
$.ajax({
type: "POST",
url: "/Test/input",
//dataType: "json",
data: JSON.stringify(
[{ Id: 1, FirstName: 'a', LastName: 'v', Gender: 'male' },
{ Id: 2, FirstName: 'b', LastName: 'v', Gender: 'female' },
{ Id: 3, FirstName: 'c', LastName: 'v', Gender: 'male' }]),
contentType: "application/json; charset=utf-8",
success: function (e) {
window.location.replace("/test/test");
}
});
这是测试结果:
您通常会通过正文将其作为 POST 发送。 或者另一种选择是在 url 中发送某种标识符,并使用它来获取另一侧的模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.