webForumDet fria alternativet

Property värde för integer försvinner.

.NET

5 svar · 350 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#1

Jag vet inte vad det är som är fel, eller vars värdet tar vägen..
Har en ddl med ett antal val,

ddl vid button_click skickar värdet på detta sätt in i en control

If IsNumeric(ddl.SelectedValue.ToString) Then
            Response.Write(ddl.SelectedValue)
            ctrlBannerList.DistrictId = ddl.SelectedValue
        Else
            ctrlBannerList.DistrictId = Integer.MinValue
        End If

Här på response.write, skriver den ut värdet..

I controllen så har jag en property

    Private m_DistrictId As Integer
    Public Property DistrictId() As Integer
        Get
            Return m_DistrictId
        End Get
        Set(ByVal Value As Integer)
            m_DistrictId = Value
        End Set
    End Property

Som skal fånga upp värdet och sätta in den i följande metod

    Private Sub BindControls()
        Dim read As New GetData
        Dim ds As DataSet

        If Me.DistrictId <> Integer.MinValue Then
            Response.Write(Me.DistrictId)
            ds = read.GetRandomBanners(Today, Me.DistrictId)
        End If

        If Not ds Is Nothing Then
            rptBannerList.DataSource = ds
            rptBannerList.DataBind()
        End If
    End Sub

Men, här skriver Den ut Me.DistrictId som 0, och inte det värde som skrivs ut i tidigare.. så någonstans försvinner värdet.. för DET finns ju, har ju kollat det, men var tar det vägen?

Medlem sedan nov. 20014 054 inlägg
#2

Kanske ge er lite mer kött på benen :)

Search.aspx

<%@ Register TagPrefix="uc1" TagName="BannerListCtrl" Src="~/controls/BannerListCtrl.ascx" %>
<uc1:BannerListCtrl runat="server" id="ctrlBannerList" />

Search.aspx.vb

 Protected WithEvents ctrlBannerList As BannerListCtrl

' I Button_Click metoden metoden.. 

If IsNumeric(ddl.SelectedValue.ToString) Then
            Response.Write(ddl.SelectedValue)
            ctrlBannerList.DistrictId = ddl.SelectedValue
        Else
            ctrlBannerList.DistrictId = Integer.MinValue
End If

Men men.. den skickar aldrig värdet till controllen..

Medlem sedan jan. 20022 440 inlägg
#3

Om du har Visual Studio kan du ju stega igenom funktiionen och se vad som går fel.

Jag skulle tro att

If IsNumeric(Convert.ToInt32(ddl.SelectedValue.ToString)) Then

i princip borde lösa dina problem eftersom det visar sig varje gång att ddl.SelectedValue.ToString inte blir numeriskt av en eller annan anledning. Integer.MinValue är ju som sagt 0.

Medlem sedan dec. 19996 721 inlägg
#4

1. Slå på Option Strict överallt
2. Använd Integer.TryParse i stället för IsNumeric (säkerställer att det är Integer)
3. Kontrollen bör även lagra värdet i ViewState. Annars försvinner det i nästa postback.
4. BindControls måste köras efter Button_Click.

Medlem sedan nov. 20014 054 inlägg
#5

emission skrev:

1. Slå på Option Strict överallt
2. Använd Integer.TryParse i stället för IsNumeric (säkerställer att det är Integer)
3. Kontrollen bör även lagra värdet i ViewState. Annars försvinner det i nästa postback.
4. BindControls måste köras efter Button_Click.

Jo jo.. men Integer.TryParse är inte .NET 1.0

satt över den i viewstate, visste att det var något som saknades :e Så visst funkar det nu, men inte riktigt till fullbelåtenhet, utan den ändrar värdet först efter andra klicket på submitknappen..

Medlem sedan nov. 20014 054 inlägg
#6

Löste detta med uppdateringen genom att göra BindControls public i kontrollen och anropa den från Search.aspx.vb

Nu uppdaterar den som den skall... :)

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)