代码之家  ›  专栏  ›  技术社区  ›  anonymous

ASP.NET MVC-tempdata-好的或坏的做法

  •  94
  • anonymous  · 技术社区  · 17 年前

    我正在使用 AcceptVerbs 有关如何处理ASP.NET MVC中的表单条目的详细方法,请参阅Scott Gu的Preview 5博客文章:

    • 用户通过get获取空表单
    • 用户通过向同一操作发布已填写的表单。
    • 该操作验证数据、采取适当的操作并重定向到新视图。

    所以我不必使用 TempData . 也就是说,我现在必须在这个过程中添加一个“确认”步骤,它似乎需要使用 临时数据 .

    出于某种原因,我不喜欢使用 临时数据 --它是一种可以设计的东西。

    这到底是一个有效的问题,还是我在弥补?

    8 回复  |  直到 10 年前
        1
  •  25
  •   Frank Schwieterman    17 年前

    我认为临时数据是一种通知用户的失火机制。提醒他们最近所做的事情是很好的,但我也会犹豫是否要在某些用户流程中将其作为必需步骤。原因是如果他们刷新页面,我相信它会消失。我想我也会犹豫是否使用它,因为它并没有很好地定义它的可靠性。

    我想知道问题是,在确认步骤之前,您的操作是否重定向到了另一个页面。我想知道在他们第一次提交之后,您是否可以做足够的处理来生成确认对话框,然后返回带有确认问题的原始页面。类似于验证的方式,除了验证规则检查是否执行了确认步骤(在其他验证通过之前,确认UI一直隐藏)。

        2
  •  76
  •   JasonD    16 年前

    不需要厌恶tempdata…但如果使用不当,这肯定是设计不良的迹象。如果您使用的是restful url,tempdata是将邮件从post操作传输到get操作的最佳实践。考虑一下:

    您在url products/new有一个表单。表单发布到products/create,它验证表单并创建产品,一旦成功,控制器将重定向到url products/1,一旦出错,将重定向回products/new以显示错误消息。

    products/1只是产品的标准get操作,但我们希望显示一条消息,指示插入成功。tempdata非常适合这样做。将消息添加到post控制器中的tempdata,并在视图中放置一些if逻辑,然后完成操作。

    失败时,我将在FormCollection中输入的值和错误消息集合添加到Post操作中的tempdata,并重定向到初始操作prodcats/new。 我已经向视图添加了逻辑,用以前输入的值和任何错误消息填充表单输入。我觉得很干净!

        3
  •  31
  •   John Rayner    17 年前

    我认为在使用tempdata之前最好先犹豫一下。tempdata存储在会话中,如果出现以下情况,这可能会对您产生影响:

    1. 您现在不使用网站上的会话
    2. 您的系统需要扩展到高吞吐量,也就是说,您希望完全避免会话状态
    3. 你不想使用cookie(我不知道MVC现在支持无炊事会话有多好)

    如果您的站点需要具有高可用性,那么在应用会话状态时需要考虑其他因素,但这些都是可解决的问题。

        4
  •  3
  •   Todd Smith Brandon    17 年前

    我有一个getModel方法,它首先检查tempdata[“model”]并返回它。否则,getmodel将从数据库加载适当的数据。

    当我有一个操作需要返回需要相同模型数据的不同视图时,它可以从数据库中节省额外的负载。

        5
  •  3
  •   Community Mohan Dere    8 年前

    退房 sessionless controllers 在MVC3中。事实证明,使用会话可以防止单个用户的请求并行执行,从而导致性能下降。

    由于tempdata默认使用会话,因此您将无法使用此功能。你可以切换到使用cookies作为tempdata,但这有点尴尬(至少对我来说)。不过,仍然比ViewState更干净,所以也许这不是一个大的交易破坏者。

        6
  •  2
  •   maxnk    17 年前

    你为什么这么反感?这件事只不过是把工作做好而已。)

    如果您不喜欢它,因为它是非强类型的,您可以始终围绕它制作一个包装器,它将为您提供强类型接口。

        7
  •  2
  •   Magnus Johansson    14 年前

    这就像使用viewdata,这意味着它可能不存在安全风险。但我宁愿使用viewdata而不是tempdata。请在此处查看比较原因: http://www.squaredroot.com/2007/12/20/mvc-viewdata-vs-tempdata/

    根据设计的不同,您可以将用户/购物篮或所需内容存储在数据库中的tempdata中,只需要有一个“isready”字段,该字段指示其是否已完成,使其在以后可以扩展,如果您想记住,人们可以关闭浏览器。

        8
  •  0
  •   Warren    10 年前

    所有的好答案,你有没有看过这个传递信息。

    由于大多数会话都存储在内存中,因此tempdata和session不是RESTful体系结构的最佳选择。因此,当您想要使用服务器场时,用户会话将存在于一台服务器上,而他们的下一个请求可以发送到另一台服务器。

    也就是说,看看tempdata在这里传递消息的用法。

    http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/

    如果只用于重定向到另一个页面警报,那么Mabye可以将其调整为使用查询字符串方法。

    推荐文章
    Chanh Tran  ·  TempData持久性
    8 年前