我的场景是用户选择了多个选项(用于过滤记录),然后单击按钮。结果(从数据库中检索的记录)将显示在新页面中。
你能告诉我这样做的步骤吗?以及将使用哪种方法来存储数据?我将存储什么数据?
非常感谢 。
我的场景是用户选择了多个选项(用于过滤记录),然后单击按钮。结果(从数据库中检索的记录)将显示在新页面中。
你能告诉我这样做的步骤吗?以及将使用哪种方法来存储数据?我将存储什么数据?
非常感谢 。
您可以使用会话传递它或使用 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"];
笔记:
理想情况下(和 RESTful)该场景可能会这样工作得最好:
为了增加灵活性,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 注入。但基本概念可以完成工作。