簡體   English   中英

VB.Net如何檢查是否已為屬性設置值

[英]VB.Net How to check if a value has been set for a property

我花了幾個小時試圖弄清楚這個問題,但結果還是空了。 我有一個.ascx用戶控件,我傳遞了一些值,以便它將填充一些下拉列表。 如果沒有為下拉列表設置“值”,則我想隱藏該下拉列表。 這就是我在代碼隱藏(我切掉不相關的部分)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

和我的usercontrol 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>

在我的主頁中,使用以下命令設置usercontrol的值:

dblinks.Drawing = "12345"

效果很好,但是在沒有設置Drawing屬性的頁面上,我仍然得到一個空白的下拉列表。 我正在檢查值是否為Nothing,但這沒有做到,我還嘗試檢查它是否為NullOrEmpty,IsEmpty,但無濟於事。 我也嘗試將默認值設置為Nothing,但也沒有用。 我想念什么? 我知道我可以通過在頁面上將其設置為Nothing來強制將其設置為Nothing,但是與其經過數十頁的頁面來將其設置為Nothing相比,讓控件確定是否已設置該值似乎更為簡單。

謝謝您的投入,我從StackOverflow中學到了很多,但這是我第一次必須尋求幫助。

-=格倫

此邏輯:

If Not (value Is Nothing) Then

屬性設置器中 因此,如果什么都沒有為屬性設置值,則該邏輯將永遠不會被調用。 也許您想將其放在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

當在頁面上下文中加載用戶控件時,而不是在設置屬性值時,這將有條件地隱藏該控件。 (從邏輯上講,您希望在設置屬性值時發生這種情況。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM