在不同的控制器动作方法之间传递数据

在不同的控制器动作方法之间传递数据,第1张

在不同的控制器动作方法之间传递数据

HTTP和重定向

让我们首先回顾一下ASP.NET MVC的工作方式:

  1. 当HTTP请求进入时,它将与一组路由匹配。如果路由与请求匹配,则将调用与该路由相对应的控制器动作。
  2. 在调用 *** 作方法之前,ASP.NET MVC执行模型绑定。模型绑定是将HTTP请求的内容(基本上只是文本)映射到action方法的强类型参数的过程。

让我们还提醒自己什么是重定向:

HTTP重定向是Web服务器可以发送给客户端的响应,告诉客户端在其他URL下查找请求的内容。新的URL包含在

Location
Web服务器返回给客户端的标头中。在ASP.NET
MVC中,您可以通过
RedirectResult
从 *** 作返回a 来执行HTTP重定向。

传递数据

如果只是传递简单值,例如字符串和/或整数,则可以将它们作为查询参数传递到

Location
标头中的URL中。如果您使用类似的东西会发生这种情况

return RedirectToAction("ActionName", "Controller", new { arg = updatedResultsdocument });

正如其他人所建议的

之所以不起作用,是因为该

Xdocument
对象可能非常复杂。ASP.NET
MVC框架没有直接的方法将文档序列化为适合URL的模型,然后将模型从URL值绑定回您的
Xdocument
*** 作参数。

通常,将文档传递给客户端以便客户端在下一个请求时将其传递回服务器是一个非常脆弱的过程:它将需要各种序列化和反序列化,并且各种事情都可能出错。如果文档很大,也可能会浪费大量带宽,并可能严重影响应用程序的性能。

相反,您要做的是将文档保留在服务器上,然后将标识符传递回客户端。然后,客户端将标识符与下一个请求一起传递,服务器使用该标识符检索文档。

存储数据以在下一个请求时进行检索

因此,现在的问题变成了,服务器在此期间将文件存储在哪里?好吧,这是由您决定的,最佳选择将取决于您的特定情况。如果长期需要该文档,则可能需要将其存储在磁盘或数据库中。如果它仅包含瞬态信息,则将其保存在Web服务器的内存中,ASP.NET缓存中或

Session
(或
TempData
,其
Session
最终与或多或少相同)可能是正确的解决方案。无论哪种方式,您都将文档存储在一个密钥下,该密钥将使您以后可以检索该文档:

int documentId = _mydocumentRepository.Save(updatedResultsdocument);

然后将该密钥返回给客户端:

return RedirectToAction("Update/confirm/iation", "ApplicationPoolController ", new { id = documentId });

当您想要检索文档时,您只需根据密钥来获取它:

 public ActionResult UpdateConfirmation(int id) {      Xdocument doc = _mydocumentRepository.GetById(id);      ConfirmationModel model = new ConfirmationModel(doc);      return View(model); }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5084909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存