首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageButton问题- CommandArgument不工作

ImageButton问题- CommandArgument不工作
EN

Stack Overflow用户
提问于 2010-07-13 20:15:20
回答 3查看 7.6K关注 0票数 0

我在asp.net是个新手。

我正在尝试使用ImageButton链接到另一个页面。ImageButton在转发器中,代码如下:

代码语言:javascript
复制
<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>

后面的代码如下:

代码语言:javascript
复制
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永远不会发生。有人能帮上忙吗?

EN

回答 3

Stack Overflow用户

发布于 2010-07-13 20:24:05

我认为您需要处理Repeater_ItemCommand事件才能使其正常工作。它可能还会节省一些代码。

MSDN Repeater ItemCommand

此外,如果您链接到另一个页面,您是否需要回发到该页面,然后执行某种重定向,或者在新页面中具有该逻辑是否更有意义?

票数 3
EN

Stack Overflow用户

发布于 2010-07-13 21:05:08

你应该使用OnCommand,而不是OnClick。就像这样。

代码语言:javascript
复制
<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):

代码语言:javascript
复制
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();
}
票数 2
EN

Stack Overflow用户

发布于 2010-07-13 20:44:50

您不能像这样处理转发器子控件的服务器端事件。

这样想吧--如果有100个按钮,那么每个按钮需要100个事件处理程序。ImageButton1_Click仅适用于id为1的ImageButton。

答案是为您的中继器连接ItemCommand事件。

如下所示:

代码语言:javascript
复制
<asp:repeater id = "Repeater`" runat = "server" onItemCommand = "SomeEvent">

然后处理触发此事件的所有按钮的"SomeEvent“:

代码语言:javascript
复制
protected void SomeEvent ( Object src, RepeaterCommandEventArgs e ) {  
      var whoClickedMe = ((ImageButton) e.CommandSource );
}

Here's上有一篇关于这方面的好文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3237019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档