Redirect 在渲染调用之间维护ViewData

Redirect 在渲染调用之间维护ViewData,redirect,asp.net-mvc-2,viewdata,renderaction,tempdata,Redirect,Asp.net Mvc 2,Viewdata,Renderaction,Tempdata,我正在使用Html.RenderAction在网站的每个页面上呈现一个常见的登录表单 如果用户在文本框中输入他们的详细信息并单击“提交”,它会向处理登录的控制器发送帖子 如果他们犯了错误,例如输入了无效的电子邮件地址,它将用错误消息填充ModelState,然后重定向回他们之前所在的任何页面 问题是,因为渲染是作为一个单独的请求进行的,所以我将丢失ViewModel 即使我将其放入TempData中,它也会丢失,因为TempData会在每个单独的请求中刷新 有没有办法在连续的Html.Rende

我正在使用Html.RenderAction在网站的每个页面上呈现一个常见的登录表单

如果用户在文本框中输入他们的详细信息并单击“提交”,它会向处理登录的控制器发送帖子

如果他们犯了错误,例如输入了无效的电子邮件地址,它将用错误消息填充ModelState,然后重定向回他们之前所在的任何页面

问题是,因为渲染是作为一个单独的请求进行的,所以我将丢失ViewModel

即使我将其放入TempData中,它也会丢失,因为TempData会在每个单独的请求中刷新

有没有办法在连续的Html.RenderAction调用之间保存数据


如果没有,有什么建议可以帮助我解决这个问题吗?(是否应该将数据放入会话?

以下是我目前所做的工作。(这可能不是最理想的解决方案。)

我创建了一个“PreserveViewDataAttribute”,我将其放在任何要在会话中保留ViewData的操作上

在我的BaseController中,我用自己的方法覆盖了“Redirect”方法,该方法执行以下操作

  • 获取对调用它的操作方法的引用(这里有一点反射)

  • 检查此方法是否定义了“PreserveViewDataAttribute”

  • 如果是,则将当前ViewData复制到会话变量。(变量的标签与当前操作名称相同,末尾添加了“_ViewData”。)

  • 在这两种情况下,都调用基本重定向方法

  • 然后,我在BaseController中创建了一个名为“PreservedViewData”的属性,该属性在会话中返回与当前操作相关的ViewData。(如果未找到,则返回null)

    因此,为了尽可能长时间地保留ViewData,我只需要使用“PreserveViewDataAttribute”来修饰我的操作,然后在需要时调用“PreservedViewData”


    如果您希望源代码支持此操作,请告诉我。

    以下是我目前所做的工作。(这可能不是最理想的解决方案。)

    我创建了一个“PreserveViewDataAttribute”,我将其放在任何要在会话中保留ViewData的操作上

    在我的BaseController中,我用自己的方法覆盖了“Redirect”方法,该方法执行以下操作

  • 获取对调用它的操作方法的引用(这里有一点反射)

  • 检查此方法是否定义了“PreserveViewDataAttribute”

  • 如果是,则将当前ViewData复制到会话变量。(变量的标签与当前操作名称相同,末尾添加了“_ViewData”。)

  • 在这两种情况下,都调用基本重定向方法

  • 然后,我在BaseController中创建了一个名为“PreservedViewData”的属性,该属性在会话中返回与当前操作相关的ViewData。(如果未找到,则返回null)

    因此,为了尽可能长时间地保留ViewData,我只需要使用“PreserveViewDataAttribute”来修饰我的操作,然后在需要时调用“PreservedViewData”


    如果你想知道这篇文章的源代码,请告诉我。

    你可能会喜欢卡齐·拉希德的这篇文章


    你可能会喜欢卡齐·拉希德的这篇文章


    注意:似乎我不是唯一一个出现此问题的人:也尝试此问题:注意:似乎我不是唯一一个出现此问题的人:也尝试此问题: