通过Querystring传递用户输入值而不需要代码

时间:2012-09-04 12:29:00

标签: asp.net vb.net hyperlink query-string

我正在尝试通过我的网站生成报告。

Default.aspx有一个下拉列表和2个文本框。报告(在不同页面上生成)必须使用用于从SQL Server收集数据的sql查询中这3个控件的所有值。

概念
用户可以将所有3个字段保留其默认值,或更改其中任何一个。在确定用户想要查看报告的值后,他们可以点击HyperLink control在新标签页中打开报告页面。

DropDownList中的值通过SelectedIndexChanged上设置的Session变量传递给Report.aspx。 Report.aspx读取此内容并应读取2个文本框的Text值。

问题
我无法弄清楚如何将TextBoxes的值发送到Report.aspx。我想到了以下几点:

<asp:HyperLink runat="server" id="lnkReport"
  NavigateUrl="Report.aspx?fromdate=<%# Eval('txtFromDate.Text') %>&todate=<%# Eval('txtToDate.Text') %>"
  target="_blank" Text="Generate Report"></asp:HyperLink>

我不确定这会起作用,因为Eval通常需要父控件进行数据绑定 - 据我所知,无论如何。

任何建议都将不胜感激

3 个答案:

答案 0 :(得分:0)

使用jQuery或Javascript你可以调用一个客户端函数来从表单元素中获取值,构造url并打开一个新窗口吗?

答案 1 :(得分:0)

在我提出这个问题后,我记得Dropdownlist和文本框用于绑定Default.aspx上的GridView,我在这里使用了这个优势。

我知道,在我点击生成报告之前,GridView绝对绑定,所以我在那里设置会话变量来存储报告所需的信息。

Dim db As New Database

Dim sql As String = "select * from users where userid = @id and dateregistered between @fromdate and @todate"

Dim args As New List(Of SqlParameter)
args.Add(New SqlParameter("@id", ddlUsers.SelectedItem.Value))
args.Add(New SqlParameter("@fromdate", txtFromDate.Text))
args.Add(New SqlParameter("@todate", txtToDate.Text))

gvItems.DataSource = db.GetDataReader(sql, args.ToArray())
dvItems.DataBind()

Session("userid") = ddlUsers.SelectedItem.Value
Session("fromdate") = txtFromDate.Text
Session("todate") = txtToDate.Text

答案 2 :(得分:0)

您可以使用链接按钮进行跨页面发布,而不是使用HyperLink。

<asp:LinkButton runat="server" id="lnkReport"
  NavigateUrl="~/Report.aspx"
  target="_blank" Text="Generate Report"></asp:LinkButton>

然后在 Report.aspx.cs

Page.PreviousPage获取值,如下所示:

DropDownList userid = (DropDownList)Page.PreviousPage.FindControl("ddlUsers");
TextBox fromdate = (TextBox)Page.PreviousPage.FindControl("fromdate");
TextBox todate = (TextBox)Page.PreviousPage.FindControl("todate");

在报告页面中根据需要使用这些。