asp.net: Атрибуты. Добавить, чтобы сохранить - и как я могу их прочитать? - PullRequest
1 голос
/ 13 декабря 2011

Я добавляю в asp.net (vb) атрибут к кнопке с изображением:

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

Это нормально работает.

Теперь я хочу прочитать атрибут,но это не работает:

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

Как мне заставить эту штуку работать?

Редактировать

У меня есть ретранслятор asp.net.В этом повторителе у меня есть в каждом элементе две кнопки с изображениями.Если я нажму на кнопку с изображением, другая кнопка с изображением в этой строке изменит свой URL.Я хочу, чтобы этот URL был сохранен после нажатия на кнопку изображения другой строки.

Поэтому я добавляю в событие повторителя 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

В Загрузка страницы Событие, которое я добавляю:

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

Во время отладки все равно пропускается все, потому что все атрибуты пусты (но на самом деле это не так)!

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Похоже, для VB это должно быть:

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

РЕДАКТИРОВАТЬ: оригинальный ответ был для C #: должны быть квадратные скобки на чтение:

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

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

1 голос
/ 13 декабря 2011

Я думаю! Может быть, вы установили (выключите режим просмотра) значение EnableViewState=False для кнопки imgButton.

Взгляните на этот образец:

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>

Код:

     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:

Может быть опечаткой в ​​коде события ItemCommand.

imgButton.ImageUrl = "myURL"
 imgButton.Attributes.Add("myAttr1", "true") '<----- Correction
0 голосов
/ 13 декабря 2011

Решение проблемы с отсутствием атрибутов, установленных при загрузке вашей страницы.

Мне не совсем ясно, что вы пытаетесь выполнить, но, похоже, у вас возникла проблема с порядком выполнения событий. При отправке сообщения выполняется событие загрузки страницы, затем обработчик события для элемента управления, вызывающего отправку сообщения. Если кнопка с изображением вызывает публикацию назад, то атрибут не устанавливается до тех пор, пока событие загрузки страницы не завершится. Однако, если вы используете viewstate, ваш атрибут должен быть сохранен и обнаружен в следующем посте.

Если это то, что происходит с вами, то одним из возможных способов было бы переместить код из события загрузки страницы в событие предварительного отображения страницы. Предварительный рендеринг происходит после того, как были обработаны события обратной передачи элемента управления, и это одна из последних точек, где вы можете подключиться и внести изменения в свой контент, прежде чем он будет зафиксирован в viewstate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...