【问题标题】:how to pass values between two repeateres on the same page如何在同一页面上的两个转发器之间传递值
【发布时间】:2010-12-03 09:26:43
【问题描述】:

我有两个这样的中继器:

Arrange By: Name | Age | Area

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

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

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

我希望你能帮助我将值从 repeater1 传递到 repeater2,如果你认为我说错了,请纠正我!

提前致谢:)

编辑

我的.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();
    }

我的.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”的定义,并且找不到接受“ASP.sortingcontrol_ascx”类型的第一个参数的扩展方法“arrange_lnkbtn_command”(您是否缺少使用指令还是程序集引用?)

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>

【问题讨论】:

    标签: c# asp.net ajax webforms


    【解决方案1】:

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

    然而,通常你会使用像 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();
      }
    

    【讨论】:

    • 您的回答简单明了,但是如果您阅读我的问题,此链接按钮将放置在中继器内,并且根据单击的链接按钮值,将根据此值填充第二个中继器 - 怎么做它!这就是我希望知道的-
    • @lKashef 我已经更新了我的答案以显示一种方式。显然我不知道你的数据是如何存储的,或者你如何检索它,但你基本上需要获取你的数据并根据按钮命令传递的参数对其进行过滤,然后将其绑定到你的第二个中继器。
    • 它更清楚,谢谢你......但我不知道如何处理转发器内的链接按钮事件。在设计视图中它不会让我双击链接按钮..只是父中继器!然后我尝试对其进行硬编码,它显示此错误“您是否缺少 using 指令或程序集引用?”!
    • yh Dan,我明白了,但如果它有帮助..我将数据存储在数据库中,并使用 ADO.NET 类(sqlconnection、sqlcommand 等)来访问它们...yh 我绝对会需要(在我的旧实现中,我使用了 command.parameters,将参数添加到命令中,你怎么看?)
    • 您可能需要手动编码,但上面的示例向您展示了事件签名。只需确保处理事件的方法名称与按钮的 OnCommand 属性中的值相同。如果您仍然卡住,请使用一些代码更新您的问题,以便我们看到您正在尝试什么。
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2016-04-29
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多