【问题标题】:Passing parameters in an ASP.Net DetailsView image button OnClick event handler在 ASP.Net DetailsView 图像按钮 OnClick 事件处理程序中传递参数
【发布时间】:2013-01-28 18:49:29
【问题描述】:

是否可以将 ASP.Net 图像按钮 OnClick 事件处理程序中的参数发送到代码隐藏文件?

在 DetailsView 中,我们为 Edit 模板在一周中的每一天都有这个标记,在此之上还有另一个用于 insert 模板的编码:

<EditItemTemplate>
    <asp:ImageButton 
        ID="ImageButtonEditDayOfWeekMonday" 
        runat="server" 
        ImageUrl='<%# getCheckboxImageToDisplay(Eval("DayOfWeekMonday"))%>' 
        Height="15"
        Width="15" 
        OnClick="ImageButtonEditDayOfWeekMonday_Click"
        CausesValidation="False">
    </asp:ImageButton>
</EditItemTemplate>

代码隐藏文件中的处理程序:

Protected Sub ImageButtonEditDayOfWeekTuesday_Click(sender As Object, e As ImageClickEventArgs)

    Dim imgTheImageButton As New ImageButton

    imgTheImageButton = DetailsView.FindControl("ImageButtonEditDayOfWeekTuesday")

    If imgTheImageButton.ImageUrl = "../../Images/checked.png" = True Then

        imgTheImageButton.ImageUrl = "../../Images/unchecked.png"
        LabelCheckBoxTuesday.Text = False
    Else

        imgTheImageButton.ImageUrl = "../../Images/checked.png"
        LabelCheckBoxTuesday.Text = True
    End If
End Sub

这将相当于大量的编码。

是否可以创建单个处理程序并像这样调用它?

OnClick="ImageButtonDayOfWeek_Click("Monday", "Edit")

所有处理程序之间的唯一区别是:

imgTheImageButton = DetailsView.FindControl("ImageButtonEditDayOfWeekTuesday")

在单个处理程序中使用一堆 if 语句并使用适当的“ID”放置在 DetailsView.FindControl 中会很好。

【问题讨论】:

    标签: asp.net vb.net onclick parameter-passing detailsview


    【解决方案1】:

    在您的 ImageButton 中,添加一个 CommandArgument 属性:

    <EditItemTemplate>
    <asp:ImageButton 
        ID="ImageButtonEditDayOfWeekMonday" 
        runat="server" 
        ImageUrl='<%# getCheckboxImageToDisplay(Eval("DayOfWeekMonday"))%>' 
        Height="15"
        Width="15" 
        OnClick="ImageButtonEditDayOfWeekMonday_Click"
        CommandArgument='<%# Eval("DayOfWeekMonday") %>'
        CausesValidation="False">
    </asp:ImageButton>
    

    然后在你的代码隐藏中:

    Protected Sub ImageButtonEditDayOfWeekTuesday_Click(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
    
        //e.CommandArgument should contain the actual value of DayOfWeekMonday
        Dim arg As String = e.CommandArgument.ToString()
    
    End Sub
    

    【讨论】:

    • 感谢您的快速回复。我用过:CommandArgument="Monday, Edit" 但是当我输入 e 时。在文件后面的代码中,我只得到 e.x 和 e.y 作为可能的值,而不是 e.CommandArgument。我遗漏了什么吗?
    • 我在后面的代码中更改了ImageButtonEditDayOfWeekTuesday_Click的参数。尝试一下。我从这里得到了stackoverflow.com/questions/7957816/…
    • 您好,当我将其更改为 (ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs) 时出现此错误:编译器错误消息:BC31143:方法 'Protected Sub ImageButtonEditDayOfWeekMonday_Click( sender As Object, e As System.Web.UI.WebControls.CommandEventArgs)' 没有与委托 'Delegate Sub ImageClickEventHandler(sender As Object, e As System.Web.UI.ImageClickEventArgs)' 兼容的签名。
    • 错误信息真的很神秘。看起来可能无法使用图像按钮完成。
    猜你喜欢
    • 2023-03-13
    • 2015-04-09
    • 2018-06-27
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多