Keith L.
Keith L.

Reputation: 2124

asp.net: Attributes.Add is to save - and how do i read them?

I'm adding in asp.net (vb) an attribute to an image-button:

imgButton.Attributes.Add("myAttr", "true")

This is working fine.

Now i want to read the attribute, but it does not work:

If imgButton.Attributes("myAttr") = "true" Then
 ..doSomething..

How do I get this thing working?

Edit

I have an asp.net repeater. In this repeater i have in each itemtemplate two image buttons. If I'm clicking on an imagebutton, the other imagebutton in this row changes it's URL. I want that this URL is saved, after clicking on another row's imagebutton.

So I'm adding in the repeater event ItemCommand

Dim imgButton As ImageButton

    If e.CommandName = "imgBtn1" Then

        imgButton = CType(e.Item.FindControl("imgBtn1"), ImageButton)
        imgButton.ImageUrl = "myURL"
        imgButton.Attributes.Add("myAttr1", "true")

    ElseIf e.CommandName = "imgBtn2" Then

        imgButton = CType(e.Item.FindControl("imgBtn2"), ImageButton)
        imgButton.ImageUrl = "myURL"
        imgButton.Attributes.Add("myAttr2", "true")

    End If

In the Page Load event I'm adding:

If Page.IsPostBack Then
        Dim countRepeaterItems As Integer = myRepeater.Items.Count
        Dim imgButton As ImageButton

        For i As Integer = 0 To countRepeaterItems - 1
            imgButton = CType(myRepeater.Items(i).FindControl("imgBtn1"), ImageButton)
            If imgButton.Attributes.Item("myAttr1") = "true" Then
                imgButton.ImageUrl = "myURL"
            End If
            imgButton = CType(myRepeater.Items(i).FindControl("imgBtn2"), ImageButton)
            If imgButton.Attributes.Item("myAttr2") = "true" Then
                imgButton.ImageUrl = "myURL"
            End If
        Next

    End If

While debugging, it still skips everything, because all Attributes are empty (but actually they are not)!

Upvotes: 1

Views: 6177

Answers (3)

Rozwel
Rozwel

Reputation: 2020

Addressing the issue of not finding the attributes set in your page load.

I am not entirely clear on what you are trying to accomplish, but it seems likely that you are running into a problem with the order that events execute. On a post back, the page load event executes, then the event handler for the control causing the post back. If your image button causes the post back, then the attribute is not being set until after the page load event has already completed. However, assuming you are using viewstate, your attribute should be persisted and detected on the following post back.

If this is what is happening to you, then one possible way around it would be to move the code from your page load event to the page pre render event. Pre render occurs after the control's post back events have been handled, and it is one of the last points where you can hook in and make changes to your content before it is committed to viewstate.

Upvotes: 0

KV Prajapati
KV Prajapati

Reputation: 94645

I guess! May be you have (turn off the viewstate) set EnableViewState=False to the imgButton.

Take a look at this sample:

Markup:

<form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" Text="Button" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>

Code:

     Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
        If Label1.Attributes("myAttr") = "true" Then
            Label1.Attributes.Add("myAttr", "false")
            Label1.Text = "false is set"
        Else
            Label1.Attributes.Add("myAttr", "true")
            Label1.Text = "true is set"
        End If
    End Sub
    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Label1.Attributes.Add("myAttr", "true")
        End If
    End Sub

EDIT:

May be typo in ItemCommand event code.

imgButton.ImageUrl = "myURL"
 imgButton.Attributes.Add("myAttr1", "true") '<----- Correction

Upvotes: 1

Rozwel
Rozwel

Reputation: 2020

Looks like for VB it should be:

If imgButton.Attributes.Item("myAttr") = "true" Then 

EDIT: original answer was for C#: Should be square brackets on the reads:

If imgButton.Attributes["myAttr"] = "true" Then 

http://msdn.microsoft.com/en-us/library/kkeesb2c.aspx#Y0

Upvotes: 3

Related Questions