如何在同一页面上的两个重复之间传递值

时间:2010-12-03 09:26:44

标签: c# asp.net ajax webforms

我有两个看起来像这样的中继器:

Arrange By: Name | Age | Area

我现在要做的是用字母表填充数据库中的第二个转发器,如果​​点击了年龄,那么第二个转发器将从具有一些年龄范围的数据库中填充!

我已经通过在第一个转发器中放置一个超链接来实现我的想法,该超链接通过 - 使用它的NavigateUrl属性 - 同一页面的URL但有一些查询字符串值!

我被告知querystrings用于将值从一个页面传递到另一个页面,而不是同一页面...而且我还想使用一些AJAX(脚本管理器和更新面板)但事实证明我必须在我的转发器中使用一些服务器控件而不是html控件,以便它能够回发到服务器

我希望你帮我一个很好的实现方法,将值从repeater1传递到repeater2,如果你认为我说错了请Corret Me!

提前致谢:)

修改

my.aspx.cs

protected void Page_Load(object sender, EventArgs e)
        {
            string commandString1 = "SELECT [arrange_by_id], [arrange_by] FROM [arrange_by]";


            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString))
            {
                using (SqlCommand cm = new SqlCommand(commandString1, cn))
                {
                    cn.Open();

                    using (SqlDataReader dr = cm.ExecuteReader())
                    {
                        ArrangeBy_rpt.DataSource = dr;
                        ArrangeBy_rpt.DataBind();
                    }
                }
            }
          }

    void arrange_lnkbtn_command(object sender, CommandEventArgs e)
    {
         Label1.Text = (e.CommandArgument).ToString();
    }

my.aspx

    <asp:Repeater ID="ArrangeBy_rpt" runat="server">
       <ItemTemplate>
          <asp:LinkButton id="arrange_lnkbtn" OnCommand="arrange_lnkbtn_command" CommandArgument='<%#Eval("arrange_by_id") %>' runat="server">
          <%# Eval("arrange_by") %>
          </asp:LinkButton>
       </ItemTemplate>
       <SeparatorTemplate> | </SeparatorTemplate>
    </asp:Repeater>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

编译错误

编译器错误消息:CS1061:'ASP.sortingcontrol_ascx'不包含'arrange_lnkbtn_command'的定义,并且没有扩展方法'arrange_lnkbtn_command'可以找到接受类型'ASP.sortingcontrol_ascx'的第一个参数(你是否错过了使用指令或程序集引用?)

Line 4:  <asp:Repeater ID="ArrangeBy_rpt" runat="server">
Line 5:     <ItemTemplate>
Line 6:        <asp:LinkButton id="arrange_lnkbtn" OnCommand="arrange_lnkbtn_command" CommandArgument='<%#Eval("arrange_by_id") %>' runat="server">
Line 7:        <%# Eval("arrange_by") %>
Line 8:        </asp:LinkButton>

1 个答案:

答案 0 :(得分:1)

使用查询字符串将数据传递到同一页面本身没有任何错误,但它不应该用于用户可能通过“黑客”URL更改的敏感数据。但是,它不是ASP.NET WebForms中的标准处理方式,因为它不会回发页面上任何其他控件的值(因此,如果不手动重新填充它们,它们将不会保留其状态在每页加载)。但如果这对你来说不是问题,请随意坚持使用querystring。

Howecer,通常您将使用服务器端控件,如asp:Buttonasp:LinkButton,然后处理其OnClick事件。但是,要使用一个数据传递数据,您可以使用该按钮的CommandNameCommandArgument属性,然后处理OnCommand事件。

 <asp:LinkButton id="LinkButton1" 
           Text="Click Me"
           CommandName="Age" 
           CommandArgument="18" 
           OnCommand="LinkButton_Command" 
           runat="server"/>

在代码隐藏中:

  void LinkButton_Command(Object sender, CommandEventArgs e) 
  {
     var data = GetData(e.commandArgument); // implement a method that gets your data filtered by the argument passed from the button
     Repeater2.DataSource = data;
     Repeater2.DataBind();
  }