VB.Net 如何检查是否已为 属性 设置值
VB.Net How to check if a value has been set for a property
我花了几个小时试图解决这个问题,但一无所获。我有一个 .ascx 用户控件,我传递了一些值,因此它将填充一些下拉列表。如果下拉列表没有 "Set" 值,我想隐藏下拉列表。这是我在代码隐藏中的内容(我删除了不相关的部分)databaselinks.ascx.vb:
Public Class databaselinks
Inherits System.Web.UI.UserControl
Public Property Drawing As String
Get
'
End Get
Set(ByVal value As String)
If Not (value Is Nothing) Then
' Create a new ListItemCollection
Dim liDrawingLink As New ListItemCollection()
' Add items to the collection
liDrawingLink.Add(New ListItem("For this drawing...", ""))
liDrawingLink.Add(New ListItem("...view drawing details", "engdrawingdetail.aspx?dwg=" & value))
liDrawingLink.Add(New ListItem("...view Bill of Materials", "engdrawingbom.aspx?dwg=" & value))
liDrawingLink.Add(New ListItem("...list Work Orders", "wolist.aspx?dwg=" & value))
liDrawingLink.Add(New ListItem("...list transmittals", "engtransmittaldrawing.aspx?dwg=" & value))
' Databind our DDL to the ListItemCollection we just filled
ddDrawingLink.DataSource = liDrawingLink
ddDrawingLink.DataTextField = "Text"
ddDrawingLink.DataValueField = "Value"
ddDrawingLink.DataBind()
ddDrawingLink.Visible = True
Else
ddDrawingLink.Visible = False
End If
End Set
End Property
Sub btnGo3_Click(ByVal sender As Object, ByVal e As EventArgs)
Response.Redirect(ddDrawingLink.SelectedItem.Value)
End Sub
End Class
还有我的用户控件databaselinks.ascx:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="databaselinks.ascx.vb" Inherits="Rubb_Intranet_Databases.databaselinks" %>
<asp:Table Id="tblA" RunAt="server" CssClass="printhide">
<asp:TableRow Id="trA1" RunAt="server" >
<asp:TableCell Id="tdA1" RunAt="server">
<asp:Table Id="tblB" RunAt="server">
<asp:TableRow Id="trB1" RunAt="server" >
<asp:TableCell Id="tdB1" RunAt="server" BackColor="#FFFF99" Style="font-size: 9px; border: 1px solid Black; padding: 2px;">
Choose a page to visit from the dropdown
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow Id="TableRow1" RunAt="server" >
<asp:TableCell Id="TableCell1" RunAt="server">
<asp:DropDownList Id="ddDrawingLink" RunAt="server" Width="190" OnSelectedIndexChanged="btnGo3_Click" AutoPostBack="True" Visible="False" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
在我的主页中,我将用户控件的值设置为:
dblinks.Drawing = "12345"
效果很好,但是在我没有设置绘图的页面上 属性,我仍然得到一个空白的下拉列表。我正在检查该值是否为 Nothing,但没有这样做,我还尝试检查它是否为 NullOrEmpty、IsEmpty,但无济于事。我也试过将默认值设置为 Nothing,但也没有用。我错过了什么?我知道我可以通过在我的页面上设置该值来强制将其设置为 Nothing,而不是通过几十页将值设置为 Nothing,让控件确定该值是否已设置似乎更简单。
感谢您的意见,我从 Whosebug 学到了很多东西,但这是我第一次不得不寻求帮助。
-=格伦
这个逻辑:
If Not (value Is Nothing) Then
在属性setter。因此,如果没有任何东西 设置 为 属性 的值,则永远不会调用该逻辑。也许你想把它放在 Page_Load
中? (或者,如果用户控件有等效项,谢天谢地,我已经有一段时间没有使用 Web 窗体了。)像这样的东西:
Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
If Drawing Is Nothing Then
ddDrawingLink.Visible = False
End If
End Sub
这将在页面上下文中加载用户控件时有条件地隐藏该控件,而不是在设置 属性 值时。 (因为从逻辑上讲,您希望在 不 设置 属性 值时发生这种情况。)
我花了几个小时试图解决这个问题,但一无所获。我有一个 .ascx 用户控件,我传递了一些值,因此它将填充一些下拉列表。如果下拉列表没有 "Set" 值,我想隐藏下拉列表。这是我在代码隐藏中的内容(我删除了不相关的部分)databaselinks.ascx.vb:
Public Class databaselinks
Inherits System.Web.UI.UserControl
Public Property Drawing As String
Get
'
End Get
Set(ByVal value As String)
If Not (value Is Nothing) Then
' Create a new ListItemCollection
Dim liDrawingLink As New ListItemCollection()
' Add items to the collection
liDrawingLink.Add(New ListItem("For this drawing...", ""))
liDrawingLink.Add(New ListItem("...view drawing details", "engdrawingdetail.aspx?dwg=" & value))
liDrawingLink.Add(New ListItem("...view Bill of Materials", "engdrawingbom.aspx?dwg=" & value))
liDrawingLink.Add(New ListItem("...list Work Orders", "wolist.aspx?dwg=" & value))
liDrawingLink.Add(New ListItem("...list transmittals", "engtransmittaldrawing.aspx?dwg=" & value))
' Databind our DDL to the ListItemCollection we just filled
ddDrawingLink.DataSource = liDrawingLink
ddDrawingLink.DataTextField = "Text"
ddDrawingLink.DataValueField = "Value"
ddDrawingLink.DataBind()
ddDrawingLink.Visible = True
Else
ddDrawingLink.Visible = False
End If
End Set
End Property
Sub btnGo3_Click(ByVal sender As Object, ByVal e As EventArgs)
Response.Redirect(ddDrawingLink.SelectedItem.Value)
End Sub
End Class
还有我的用户控件databaselinks.ascx:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="databaselinks.ascx.vb" Inherits="Rubb_Intranet_Databases.databaselinks" %>
<asp:Table Id="tblA" RunAt="server" CssClass="printhide">
<asp:TableRow Id="trA1" RunAt="server" >
<asp:TableCell Id="tdA1" RunAt="server">
<asp:Table Id="tblB" RunAt="server">
<asp:TableRow Id="trB1" RunAt="server" >
<asp:TableCell Id="tdB1" RunAt="server" BackColor="#FFFF99" Style="font-size: 9px; border: 1px solid Black; padding: 2px;">
Choose a page to visit from the dropdown
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow Id="TableRow1" RunAt="server" >
<asp:TableCell Id="TableCell1" RunAt="server">
<asp:DropDownList Id="ddDrawingLink" RunAt="server" Width="190" OnSelectedIndexChanged="btnGo3_Click" AutoPostBack="True" Visible="False" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
在我的主页中,我将用户控件的值设置为:
dblinks.Drawing = "12345"
效果很好,但是在我没有设置绘图的页面上 属性,我仍然得到一个空白的下拉列表。我正在检查该值是否为 Nothing,但没有这样做,我还尝试检查它是否为 NullOrEmpty、IsEmpty,但无济于事。我也试过将默认值设置为 Nothing,但也没有用。我错过了什么?我知道我可以通过在我的页面上设置该值来强制将其设置为 Nothing,而不是通过几十页将值设置为 Nothing,让控件确定该值是否已设置似乎更简单。
感谢您的意见,我从 Whosebug 学到了很多东西,但这是我第一次不得不寻求帮助。
-=格伦
这个逻辑:
If Not (value Is Nothing) Then
在属性setter。因此,如果没有任何东西 设置 为 属性 的值,则永远不会调用该逻辑。也许你想把它放在 Page_Load
中? (或者,如果用户控件有等效项,谢天谢地,我已经有一段时间没有使用 Web 窗体了。)像这样的东西:
Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
If Drawing Is Nothing Then
ddDrawingLink.Visible = False
End If
End Sub
这将在页面上下文中加载用户控件时有条件地隐藏该控件,而不是在设置 属性 值时。 (因为从逻辑上讲,您希望在 不 设置 属性 值时发生这种情况。)