【问题标题】:Passing user input values through Querystring without code behind通过 Querystring 传递用户输入值,无需代码
【发布时间】:2012-08-29 02:46:15
【问题描述】:

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

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

概念
用户可以保留所有 3 个字段的默认值,或更改其中任何一个。在确定用户希望查看报告的值后,他们可以单击 HyperLink control 在新选项卡中打开报告页面。

DropDownList 中的值通过在SelectedIndexChanged 上设置的会话变量传递给 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 通常需要父控件进行数据绑定 - 据我所知。

任何建议将不胜感激

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在我问了这个问题后,我记得下拉列表和文本框是用来在 Default.aspx 上绑定一个 GridView 的,我在这里利用了这个优势。

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

      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
      

      【讨论】:

        【解决方案3】:

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

        <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");
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-27
          • 2015-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多