如何在开机自检后从不同的分部视图访问数据



>我有 3 个部分视图,页面上有 3 个视图模型:

  1. 帐户列表
  2. 模式弹出窗口(您可以在此处修改多个帐户)
  3. 搜索面板

我想刷新 1. 在 2 上开机自检后。这很简单,但是如果我想保留使用搜索面板后获得的结果怎么办?

可以通过两种方式做到这一点,但这两种方式似乎都很糟糕(如果我错了,请纠正我)。

首先(我选择并工作的那个)是存储 3. 中使用的视图模型。 在 TempData 中。我进行搜索(POST)并将传递的视图模型保存在TempData中。然后每当我在不同的部分视图上开机自检时,我都可以刷新 1。使用来自 TempData 的数据(搜索参数)。

 private const string SearchDataKey = "SearchData";
    [HttpGet]
    public PartialViewResult RefreshData()
    {
        if (TempData[SearchDataKey] != null)
            return PartialView("AccountListView", PrepareAccountListViewModelForSearchData(TempData[SearchDataKey] as AccountSearchViewModel));
        else
            return PartialView("AccountListView", PrepareAccountListViewModel());
    }

并保存视图模型:

 public PartialViewResult Search(AccountSearchViewModel searchParameters)
    {
    ...
            TempData[SearchDataKey] = searchParameters;
            return PartialView("AccountListView", databaseAccountListViewModel);}

第二种方法是始终使用所有 3 个视图模型发布"大"视图模型。这样,我将从搜索的视图模型中获得数据,但我会发送许多不需要的信息,而不仅仅是我需要调用过程的模式弹出窗口的视图模型。

我问了一些经验更好的 MVC 人员,他们说他们永远不必在 TempData 中存储视图模型,但这似乎仍然比拥有 1 个大表单并在每个 POST 中传递所有内容更合理。

您知道处理此问题的更好方法或哪种方法是正确的吗?

主题具有"最佳实践",但由于警告消息而被删除。我希望在SO上仍然允许询问意见。

PS2.初始加载后,我的大多数 POST 和 GET 都是通过 Ajax 实现的。

我做搜索(发布)

这对我来说似乎在语义上不正确。搜索是一种不应修改服务器上任何状态的操作。因此,使用GET似乎更合适。当您使用GET时,您的好处是所有参数都已存在于查询字符串中,因此在连续的 POST 操作(例如在您的情况下修改帐户)时保留。因此,RefreshData操作可以将AccountSearchViewModel作为参数,模型绑定器将处理其余的工作。

相关内容

  • 没有找到相关文章

最新更新