我在 asp.net Web 应用程序中有五个页面。我在第一页输入了信息,然后单击下一步。它转到下一页并在此页面中输入信息。我继续这个过程五页。在点击第五页的提交按钮之前,我需要在点击审核按钮的所有先前页面中输入的所有信息后进行审核。这是怎么做的?请建议。
3 回答
我个人认为你在这件事上走错了路。在页面之间传递数据会给你带来各种各样的麻烦。
有许多方法可以在单个页面上实现这一点。您可以创建 5 个单独的控件并将它们全部放在单个页面上(如果它们不是太大并减慢页面加载速度),然后根据用户要查看的内容使适当的控件可见。例如,当您单击下一步时,将当前控件的可见属性设为 false,然后显示下一个。然后在过程结束时,当您单击完成时,您可以从每个控件访问输入的数据,您可以在控件中创建一个花哨的函数,该函数返回一个填充的类,甚至通过引用传递(我们不会进入到这里)。
您也可以考虑使用Views。这是您可以在单个页面上实现的另一种方法。
如果您坚持使用多个页面,那么您可以将数据临时存储在数据库中,然后在最后一页上从会话中获取 ID,并最终将其全部存储为一个。但我不建议这样做,尽管这取决于情况。如果您希望他们能够填写一半的表格,然后在以后继续,那么建议使用数据库方法,但如果您只想在完成时存储数据,那么您最终会得到很多完成一半的冗余数据使用这种方法。
您可以在执行这些步骤时将数据存储在数据库中,并在最后一步中检索它。您也可以将其存储在 Session 中,作为替代方案。
当然还有其他方法可以实现这个场景,但想法是以某种方式持久化数据并在最后一步中检索它。
解决方案完全取决于您使用的框架和方法。我将尝试帮助您使用 ASP.Net MVC3 解决方案,因为我认为 MVC3 确实是使用 ASP.Net 时的最佳选择。
- 当用户单击“下一步”按钮时,只需使用 JavaScript / jQuery Ajax 方法加载部分视图(包含下一步 html),或者使用 jQuery 显示 / 隐藏功能仅显示下一步。
- 将表单数据保存在一个 html 表单标签(或至少一个 holder-div)中。
- 当您需要在最后一步提交信息时,只需使用单个 jQuery 序列化调用收集信息并将其发送到您的 ASP.Net 接收器。
一些代码片段:
从 Razor 视图引擎显示局部视图:
@Html.Partial("/Views/Instance/_General.cshtml", Model)
通过 jQuery 加载局部视图 - 更多详细信息,请参阅http://api.jquery.com/category/ajax/
@Html.Partial("/Views/Instance/_General.cshtml", Model)
通过 jQuery 将数据发布到服务器:
$("#submit-button-id").click(function () {
var data = $("#form-id").serialize();
$.ajax({
url: "/Example/Save",
type: "POST",
data: data,
cache: false,
success: function (success) {
if (success) {
// things worked out just fine..
}
else {
// present some kind of error..
}
}
});
});