【问题标题】:Cannot pass enum value in CommandArgument for WebForms无法在 WebForms 的 CommandArgument 中传递枚举值
【发布时间】:2017-11-03 11:20:48
【问题描述】:

在 CodeBehind 类中我有这个:

Public Class MyControl
    Inherits UserControl

    ' Is used in other functions so cannot be hardcoded:
    Public Enum TabID
        Accepted = 138
        Declined = 139
        Unknown = 140
        InProgress = 141
    End Enum

    Public Sub Tab_OnClick(sender As Object, e As EventArgs)

        Dim selectedTabID As Integer
        Dim linkBtn As LinkButton

        If Page.IsPostBack Then

            linkBtn = CType(sender, LinkButton)
            selectedTabID = CType(linkBtn.CommandArgument, Integer)

            ' Do stuff with selectedTabID...

        End If

    End Sub

    ' More irrelevant code...

End Class

在 ascx 文件上(前面的代码?)我有这个:

<asp:LinkButton id="AcceptedTab" Runat="server" Text="Accepted" CssClass="selected"
    CommandArgument="<%# TabID.Accepted %>" OnClick="Tab_OnClick"/>

问题在于selectedTabID = CType(linkBtn.CommandArgument, Integer)这一行在调试过程中显示linkBtn.CommandArgument是一个空字符串(应该是“138”),并且在运行时它无法将空字符串转换为整数。

我也尝试过先将枚举转换为 ascx 文件中的整数:

<asp:LinkButton id="AcceptedTab" Runat="server" Text="Accepted" CssClass="selected"
    CommandArgument="<%# CInt(TabID.Accepted) %>" OnClick="Tab_OnClick"/>

如何使用此方法在 Tab_OnClick 函数中获取此枚举值?

【问题讨论】:

    标签: asp.net vb.net enums webforms


    【解决方案1】:

    您需要在页面加载时调用DataBind(),因为您使用&lt;%# 将数据绑定到LinkBut​​ton。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)        
        DataBind
    End Sub
    

    其次,切换到Command,而不是Click。然后您可以直接访问 CommandArgument

    <asp:LinkButton id="AcceptedTab" Runat="server" Text="Accepted" CssClass="selected"
       CommandArgument="<%# CInt(TabID.Accepted) %>" OnCommand="AcceptedTab_Command"/>
    

    在后面的代码中。

    Protected Sub AcceptedTab_Command(ByVal sender As Object, ByVal e As CommandEventArgs)
        Dim arg As String = e.CommandArgument.ToString
    End Sub
    

    【讨论】:

    • DataBind() 是否也会影响页面上的其他控件,例如 GridView?如果是这样,在调用DataBind() 之前,我是否应该先分配这样的DataSource 值?非常感谢您的帮助。
    • “将数据源绑定到调用的服务器控件及其所有子控件”,所以我想是的。我现在就测试一下。
    • 一切正常。它确实按预期工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多