Asp.net 将变量从VB代码传递到aspx前端页

Asp.net 将变量从VB代码传递到aspx前端页,asp.net,.net,vb.net,Asp.net,.net,Vb.net,我试图在代码隐藏文件中隐藏一个基于变量值(groupId)的链接。 下面是我根据在stack overlfow和其他where上找到的各种搜索结果所做的尝试 方法1: <asp:HyperLink ID="test_id" runat="server" NavigateUrl='<%#String.Format("report.aspx")%>' Text='Report' ToolTip="Generate Report"

我试图在代码隐藏文件中隐藏一个基于变量值(groupId)的链接。 下面是我根据在stack overlfow和其他where上找到的各种搜索结果所做的尝试

方法1:

<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>
错误:未声明“test_id”。由于其保护级别,可能无法访问

方法2:

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%>
<%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错误。

在代码隐藏中,您需要引用ID,它是“测试ID”,而不是“Hyperlink2”


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

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

方法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%>
<%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%>

不,它不起作用。很抱歉我之前的打字错误。现在更改了我的帖子。不,方法1不起作用。我在帖子中编辑了我的方法。这是一个打字错误。很抱歉为了遵循方法2,实际上我的ds.Tables(0).Rows(0).Item(“GROUP_ID”)在page_load方法中。我该怎么处理?我在page_load方法中将它保存到一个局部变量中,并在属性方法groupId中使用它。这是apporach2的正确方法吗?对于方法2,将ds声明为页面级变量,而不是在page_load中声明。谢谢Tim。方法2非常有效!!!我只是想知道为什么方法1不起作用。我猜你的*.aspx.designer.vb文件没有包含控件测试id的声明。通常,当你的控件运行at=“server”并且codebehind说控件没有声明时,这就是原因。摆弄它并修复它可能很棘手。方法2只是简单一点。需要考虑的一件事是:将太多的逻辑(甚至与显示相关的逻辑)而不是相关的代码隐藏放进ASPX中,可能会很快产生一个完全无法维护的应用程序。你所得到的是相当直接的东西——但这可能是一个滑坡。如果你预见到将来需要添加更多这样的逻辑,你会想认真考虑把所有的逻辑移到代码后面——在一个单一的位置拥有所有的东西有很多价值。
Dim groupId As String = ds.Tables(0).Rows(0).Item("GROUP_ID")

If (groupId = 0) Then
    test_id.Visible=True
End If
<%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