通过重定向保持数据

时间:2016-03-16 15:50:18

标签: c# .net asp.net-mvc

我有一个页面,其表单接受一个帐号列表到一个文本框中,本质上是一个批量搜索。

这会发布到服务器,进行验证练习,然后成功重定向到显示页面。

目前,该列表作为GET变量添加到显示页面的URL中。这是限制性的,因为它意味着用户可能会弄​​乱它并且更大的数据集可能是个问题。它还允许绕过验证,但这是考虑在内的。

我看到2个一般解决方案,基本上是1个主题的变体:

  1. 将列表保存到数据库并传递密钥以将其加载到diplay页面。
  2. 保存到MemoryCache并再次将密钥传递到显示页面。
  3. 基于这些选项,如果我需要多个IIS节点但需要手动缓存清理,那么似乎更好1.其中2.将清理它自我,但如果我需要扩展可能是一个问题。这将是一个内部网应用程序,因此可能不需要扩展。

    是否有行业标准"处理这类问题。我来自winforms世界,跟踪状态并不是一个问题。

2 个答案:

答案 0 :(得分:2)

我认为你根本不必重定向到显示页面。从获取用户输入并打印结果的控制器返回应该呈现结果的视图,如:

public class SearchController : Controller
{
    public ActionResult SearchForAccounts(string[] accounts)
    {
        var searchResults = db.Search(accounts);

        return View('ResultsView', searchResults);
    }
}

如果你真的真的需要重定向,我想你可以将结果保存到应用程序缓存中,以后如果你需要扩展你可以使用Redis缓存提供程序,但你又应该能够显示所需的视图

答案 1 :(得分:0)

无论是Webforms还是MVC,我建议不要将验证/处理和结果分成单独的页面。

我猜测如果数据无效,您想将其放回页面,以便用户可以对其进行编辑。 (这是根据你的要求推断的猜测。)

您可以发布数据,然后如果数据有效,那么"结果"页面显示结果。如果数据不有效,则页面可以重新呈现输入表单,使用原始输入填充它,并显示验证错误。这样,用户可以修改其原始输入并重试。 (如果您正在接收用户输入并将其反映回页面,请确保转义/ unescape。)如果表单是部分视图(MVC)或用户控件(Webforms),则更容易。