1

我的场景是用户选择了多个选项(用于过滤记录),然后单击按钮。结果(从数据库中检索的记录)将显示在新页面中。

你能告诉我这样做的步骤吗?以及将使用哪种方法来存储数据?我将存储什么数据?

非常感谢 。

4

2 回答 2

1

您可以使用会话传递它或使用 GET 传递它。会议:

Session["Some_Name"] = parameter;
----------------------------------
retrive on the new page
parameter = (casting)Session["Some_Name"];

得到:

Response.Redirect(NewPage.aspx?parm1=p1?parm2=p2); // parm1,parm2 just a name. p1,p2 are paramters
----------------------------------
retrive on the new page
p1 = Request.QueryString["parm1"];
p2 = Request.QueryString["parm2"];

笔记:

  • 当您在会话中保存时,参数的类型保持不变(您可以移动对象)。
  • 当您使用 GET 重定向时,参数将作为字符串移动(您不能移动对象)。
  • 当您使用 GET 重定向时,该参数对地址处的用户可见。
于 2011-04-24T22:13:39.567 回答
1

理想情况下(和 RESTful)该场景可能会这样工作得最好:

  1. Page1 有一个表单,其中包含构建过滤器所需的各种选项。
  2. Page1 的表单 POST 到 Page2(也可以是 Page1,但听起来您希望它是一个单独的页面)。
  3. Page2 读取 POST 数据,执行过滤器,显示结果。

为了增加灵活性,Page2 应该同时检查表单元素和查询字符串元素。(如果两者都被发送,您需要决定哪个覆盖另一个。)这样,过滤器甚至可以被添加书签或通过电子邮件发送给同事。

没有必要涉及会话、cookie 等。这不必要地使事情复杂化,并使场景的可移植性和 RESTful 更少。

在这种情况下需要注意的一点是“页面”一词的使用。虽然这在 WebForms(我假设您正在使用)的思维方式中可能很常见,但您应该了解“网络”实际上没有“页面”的概念。这是“资源”的问题。

在这种情况下,Resource1 的响应(这是对 Page1.aspx 的 GET 请求)是一个对 Resource2 具有 POST 操作的表单(这是对 Page2.aspx 的 POST 请求),它会响应一些数据。为了获得最佳设计效果,您应该在心里将“页面”和“资源和请求”的概念分开。

无论如何,回到例子。Page1 会有类似的东西:

<form method="POST" action="Page2.aspx">
    <input type="text" name="filterText" />
    <button type="submit" name="filter" value="Filter" />
</form>

您会注意到这是高度简化的。您可以使用 ASP.NET 服务器控件来构建它,也可以在 HTML 中手动构建它,等等。这完全取决于您。就我个人而言,我喜欢保持输出尽可能精简,但是你想使用多少框架工具是你的决定。我认为,对于工具支持,您需要查看 ASP.NET 中的“跨页发布”,因为 WebForms 通常假定所有内容都是回发。我认为这只是在这种情况下设置的PostBackUrl问题asp:button

在 Page2 的代码隐藏中,您需要查看对象的Form属性Request。(更多信息在这里。)你会有类似的东西:

if (!string.IsNullOrEmpty(Request.Form.AllKeys["filterText"]))
{
    // Apply your filter when retrieving from the database.  Simple if your database data comes back as a delayed-execution IEnumerable.
}

与往常一样,如果您使用直接 SQL 查询、错误处理等,您将需要进行输入检查、防止任何 SQL 注入。但基本概念可以完成工作。

于 2011-04-24T22:16:21.127 回答