gpt4 book ai didi

c# - MVC 3 表单发布和持久化模型数据

转载 作者:IT王子 更新时间:2023-10-29 04:14:50 29 4
gpt4 key购买 nike

我想我缺少一些关于 MVC 表单如何工作的基础知识。我的主页上有一个搜索表单,用户可以在其中搜索五六个不同的字段。所以我有这个 POSTing to my results Action 就好了。结果操作如下所示:

[HttpPost]
public ActionResult Results(SearchModel model)
{
ResultsModel results = new ResultsModel();
results.ResultList = SearchManager.Search(model).ToList();

return View("Results", results);
}

我在这篇文章中简化了上述方法,但思路是一样的。所以这一切都很好。我的结果页面显示了结果列表,我的用户位于以下 URL:

http://www.site.com/results

所以...现在我想做一些相当普通的事情。结果页面上有两个下拉列表。 “排序依据”和“每页结果数”。我该怎么做并将全套模型数据发送回 Controller ,以便我可以使用新参数进行查询?实际上,SearchModel 类有大约 60 个不同的字段。可能所有这些数据都可能包含在模型中。您如何将其保存到“回发”页面?

同样的问题也让我对如何进行分页感到困惑。我的分页链接将指向如下 URL:

http://www.site.com/results/2

但这假设我们正在响应 GET 请求(我不希望查询字符串中有 60 个数据字段)并且模型数据在 GET 请求之间传递,我知道情况并非如此。

正如我所说,我认为我缺少一些有关使用 MVC 3、模型和表单帖子的基础知识。

任何人都可以帮我指出正确的方向吗?我很乐意根据需要编辑/更新这篇文章以澄清问题。

编辑:我还想指出,我想避免将 View 模型存储在 Session 变量中。该站点最终将在网络场中进行负载平衡,我真的尽可能避免使用 Session。但是,如果这是唯一的选择,我将配置另一个 session 状态提供程序,但我不想这样做。

最佳答案

您可以将当前的 SearchModel 参数添加到表单的路由值中。 BeginForm 的多个版本允许您传入对象/RouteValuesDictionary。

@Html.BeginForm("Action", "Controller", new { SearchModel = Model }, FormMethod.Post)

这应该传递您当前的 SearchModel 值,以便您可以重新使用它们来获取下一页。您需要定义一个 Controller 操作,该操作将接受任何当前页面表单值以及 SearchModel。

我还没有对表单帖子进行过此操作,但根据我所做的和文档所说的,这就是我要开始的地方。当然,这也意味着你的每一个页码“链接”页面都需要做帖子。如果用户希望能够使用浏览器中的后退按钮,这对用户来说确实很不方便。

在这种情况下,您可以尝试定义一个允许页码作为 URL 的一部分出现的路由——“Action/Controller/{page}”。但是,鉴于表单正在发帖,我不确定这将如何工作。

评论回复:

是的,您可以使用 Route Values 将 SearchModel 添加到每个页面链接,但正如我在上面的评论中所说,由于链接将执行“获取”,您的用户将看到 SearchModel 序列化为链接。

无论哪种方式,使用路由值都是在不使用隐藏字段、 session 或 TempData 的情况下恢复原始 SearchModel 的答案。

关于c# - MVC 3 表单发布和持久化模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849398/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com