我在asp.net是个新手。
我正在尝试使用ImageButton链接到另一个页面。ImageButton在转发器中,代码如下:
<ul id = "ulMap">
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
<li>
<asp:ImageButton ID="ImageButton1"
CommandArgument='<%#Eval("Nav_ID") %>'
runat="server"
ImageUrl="~/Icons/Ny_mappa.png"
onclick="ImageButton1_Click" />
<br />
<asp:LinkButton ID="lnkButton"
CommandArgument='<%#Eval("Nav_ID") %>'
runat="server"
onclick="LinkButton3_Click"
Text='<%#Eval("Nav_Name") %>'></asp:LinkButton>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>后面的代码如下:
protected void LinkButton3_Click(object sender, EventArgs e)
{
Guid guid = new Guid(((LinkButton)sender).CommandArgument);
var query = from n in dc.Nemanet_Navigations
where n.UserId == userGuid && n.Nav_pID == guid
orderby n.Nav_Name ascending
select n;
Repeater1.DataSource = query;
Repeater1.DataBind();
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Guid guid = new Guid(((ImageButton)sender).CommandArgument);
var query = from n in dc.Nemanet_Navigations
where n.UserId == userGuid && n.Nav_pID == guid
orderby n.Nav_Name ascending
select n;
Repeater1.DataSource = query;
Repeater1.DataBind();
}嗯,对于LinkButton来说,这很好用,但对于ImageButton就不行了。Protected void ImageButton1_Click永远不会发生。有人能帮上忙吗?
发布于 2010-07-13 20:24:05
我认为您需要处理Repeater_ItemCommand事件才能使其正常工作。它可能还会节省一些代码。
MSDN Repeater ItemCommand
此外,如果您链接到另一个页面,您是否需要回发到该页面,然后执行某种重定向,或者在新页面中具有该逻辑是否更有意义?
发布于 2010-07-13 21:05:08
你应该使用OnCommand,而不是OnClick。就像这样。
<ul id = "ulMap">
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
<li>
<asp:ImageButton ID="ImageButton1"
CommandArgument='<%#Eval("Nav_ID") %>'
runat="server"
ImageUrl="~/Icons/Ny_mappa.png"
OnCommand="ImageButton1_Click" />
<br />
<asp:LinkButton ID="lnkButton"
CommandArgument='<%#Eval("Nav_ID") %>'
runat="server"
OnCommand="LinkButton3_Click"
Text='<%#Eval("Nav_Name") %>'></asp:LinkButton>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>还有这个(注意CommandEventArgs而不是EventArgs和ImageClickEventArgs):
protected void LinkButton3_Click(object sender, CommandEventArgs e)
{
Guid guid = new Guid(e.CommandArgument);
var query = from n in dc.Nemanet_Navigations
where n.UserId == userGuid && n.Nav_pID == guid
orderby n.Nav_Name ascending
select n;
Repeater1.DataSource = query;
Repeater1.DataBind();
}
protected void ImageButton1_Click(object sender, CommandEventArgs e)
{
Guid guid = new Guid(e.CommandArgument);
var query = from n in dc.Nemanet_Navigations
where n.UserId == userGuid && n.Nav_pID == guid
orderby n.Nav_Name ascending
select n;
Repeater1.DataSource = query;
Repeater1.DataBind();
}发布于 2010-07-13 20:44:50
您不能像这样处理转发器子控件的服务器端事件。
这样想吧--如果有100个按钮,那么每个按钮需要100个事件处理程序。ImageButton1_Click仅适用于id为1的ImageButton。
答案是为您的中继器连接ItemCommand事件。
如下所示:
<asp:repeater id = "Repeater`" runat = "server" onItemCommand = "SomeEvent">然后处理触发此事件的所有按钮的"SomeEvent“:
protected void SomeEvent ( Object src, RepeaterCommandEventArgs e ) {
var whoClickedMe = ((ImageButton) e.CommandSource );
}Here's上有一篇关于这方面的好文章。
https://stackoverflow.com/questions/3237019
复制相似问题