我有两个看起来像这样的中继器:
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>
答案 0 :(得分:1)
使用查询字符串将数据传递到同一页面本身没有任何错误,但它不应该用于用户可能通过“黑客”URL更改的敏感数据。但是,它不是ASP.NET WebForms中的标准处理方式,因为它不会回发页面上任何其他控件的值(因此,如果不手动重新填充它们,它们将不会保留其状态在每页加载)。但如果这对你来说不是问题,请随意坚持使用querystring。
Howecer,通常您将使用服务器端控件,如asp:Button或asp:LinkButton,然后处理其OnClick事件。但是,要使用一个数据传递数据,您可以使用该按钮的CommandName和CommandArgument属性,然后处理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();
}