在这个常见场景中,使用什么来在页面之间传递数据

本文关键字:之间 数据 什么 常见场 | 更新日期: 2023-09-27 17:52:36

我的场景是用户选择了一些选项(用于过滤记录),然后他点击了一个按钮。结果(从DB检索到的记录)将显示在新的一页。

你能告诉我怎么做吗?使用哪种方法来存储数据?和我将存储什么数据?

在这个常见场景中,使用什么来在页面之间传递数据

理想情况下(从rest角度来说),这样的场景可能效果最好:

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

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

不需要涉及会话、cookie等内容。这不必要地使问题复杂化,并使场景的可移植性和rest化程度降低。

在这个场景中需要注意的一点是"page"这个词的使用。虽然这在WebForms(我假设您正在使用)的思维模式中可能是司空见惯的,但您应该明白,"web"实际上没有"页面"的概念。这是一个"资源"问题。"

在本例中,Resource1(对Page1.aspx的GET请求)的响应是一个表单,该表单对Resource2(对Page2.aspx的POST请求)具有POST操作,该表单使用一些数据进行响应。为了获得最佳设计结果,您应该在精神上保持"页面"answers"资源和请求"的概念分开。

不管怎样,回到例子。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的代码隐藏中,您需要查看Request对象上的Form属性。(更多信息请点击这里。)你可以这样写:

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查询,错误处理等。

可以使用会话传递它,也可以使用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重定向时,参数move作为字符串(你不能移动对象)。
  • 当使用GET重定向时,该参数对地址处的用户可见。