【问题标题】:Passing a variable from VB Code behind to aspx front end page将变量从后面的 VB 代码传递到 aspx 前端页面
【发布时间】:2014-05-05 15:29:01
【问题描述】:

我正在尝试隐藏基于代码隐藏文件上的变量值 (groupId) 的链接。 以下是我根据在 stack overlfow 和其他地方找到的各种搜索结果所尝试的。

方法一:

<asp:HyperLink  ID="test_id" runat="server" 
         NavigateUrl='<%#String.Format("report.aspx")%>' 
         Text='Report' ToolTip="Generate Report" 
         ForeColor="#333399" Font-Names="Tahoma" Target = "_blank"
         > 
        </asp:HyperLink>

后面的代码:

Dim groupId As String = ds.Tables(0).Rows(0).Item("GROUP_ID")
            'bmt_id.
            If (groupId = 0) Then
                test_id.Visible=True;

            End If

错误:未声明“test_id”。由于其保护级别,它可能无法访问。

方法二:

aspx 页面:

<%If {<%=groupId%>} = 0 Then%>

<asp:HyperLink  ID="test_id" runat="server" 
         NavigateUrl='<%#String.Format("report.aspx")%>' 
         Text='Report' ToolTip="Generate Report" 
         ForeColor="#333399" Font-Names="Tahoma" Target = "_blank"
         > 
        </asp:HyperLink>

     <%End If%>

错误:在运行时未找到 groupId 错误。

【问题讨论】:

    标签: asp.net .net vb.net


    【解决方案1】:

    您的两次尝试都非常接近,但有一些缺陷。

    方法 1:您为超链接使用了错误的名称。您将其命名为 ID="test_id"。不是“超链接2”。

    <asp:HyperLink  ID="test_id" runat="server" 
         NavigateUrl='<%#String.Format("report.aspx")%>' 
         Text='Report' ToolTip="Generate Report" 
         ForeColor="#333399" Font-Names="Tahoma" Target = "_blank"
    > 
    </asp:HyperLink>
    

    后面的代码:

    Dim groupId As String = ds.Tables(0).Rows(0).Item("GROUP_ID")
    
    If (groupId = 0) Then
        test_id.Visible=True
    End If
    

    方法 2:您使用 GroupId 作为变量(私有)而不是公共属性。

    aspx 页面:

    <%If groupId = 0 Then%>
    
    <asp:HyperLink  ID="test_id" runat="server" 
         NavigateUrl='<%#String.Format("report.aspx")%>' 
         Text='Report' ToolTip="Generate Report" 
         ForeColor="#333399" Font-Names="Tahoma" Target = "_blank"
    > 
    </asp:HyperLink>
    
    <%End If%>
    

    后面的代码:

    Public Readonly Property groupId As String
        Get
            return ds.Tables(0).Rows(0).Item("GROUP_ID")
        End Get
    End Property
    

    【讨论】:

    • 否 Approach1 不起作用。我在帖子中编辑了我的 Approach1。之前是笔误。对不起。要遵循方法 2,实际上我的 ds.Tables(0).Rows(0).Item("GROUP_ID") 是在 page_load 方法中。我该如何处理?我将它保存到 page_load 方法中的局部变量中,并在属性方法 groupId 中使用它。这是 apporach2 的正确方法吗?
    • 对于方法 2,将 ds 声明为页面级变量,而不是在 page_load 中声明。
    • 谢谢蒂姆。方法2完美!只是想知道为什么方法 1 不起作用。
    • 我猜您的 *.aspx.designer.vb 文件不包含您的控件 test_id 的声明。通常,当您的控件具有 runat="server" 并且代码隐藏说控件未声明时,这就是原因。摆弄它并修复它可能很棘手。方法 2 稍微简单一些。
    • 要考虑的一件事:将过多的逻辑(甚至与显示相关的逻辑)放入 ASPX 而不是相关的代码隐藏会很快产生完全无法维护的应用程序。你所拥有的非常简单 - 但它可能是一个滑坡。如果您预见到将来需要添加更多这样的逻辑,您将需要认真考虑将所有逻辑转移到代码隐藏中 - 将所有内容放在一个位置有很多价值。
    【解决方案2】:

    在代码隐藏中,您需要引用 ID,即“test_id”,而不是“Hyperlink2”。

            If (groupId = 0) Then
                test_id.Visible=True
    
            End If
    

    【讨论】:

    • 没有。它不起作用。抱歉我之前的错字。现在更改我的帖子。
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多