繁体   English   中英

.NET Core MVC 可以使用模型 Ajax 重定向页面

[英].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来实现它: TempDataSession来实现这个功能。

并注意,由于您传递的是多条数据,请在存储之前将它们serialize化为json,并通过deserialization获取它们

1.会话

这样,通过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);
                }
            });

2.临时数据

首先,您需要通过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM