Функция Javascript в ASP.NET Listview_ItemCreated - PullRequest
1 голос
/ 13 сентября 2010

Я пытаюсь установить некоторые свойства на стороне клиента для набора элементов управления в EditItemTemplate ASP.Net ListView.

Например, если EditItemTemplate содержит что-то вроде этого:

<tr id='phoneRow'>
  <td>
    <asp:Label ID="lblPhoneLabel" runat="server" Text="Phone Number: " />
  </td>
  <td>
    <asp:Label ID="lblPhoneNumber" runat="server" 
               Text='<%# Bind("PhoneNumber") %>' />
  </td>
</tr>

Я хочу показать строку, только если на самом деле есть номер телефона, поэтому JavaScript выглядит примерно так:

function showOrHidePhoneRow(rowId, labelId)
{
    var row = document.getElementById(rowId);
    var label = document.getElementById(labelId);

    if (label.value == "")
        row.style.visibility = "collapsed";
    else
        row.style.visibility = "visible";
}

Я пытаюсь добавить вызов этой функции в коде позади,но я не уверен как.Кажется, загрузка слишком поздняя.

protected void lvwExample_ItemCreated(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        ListViewDataItem item = e.Item as ListViewDataItem;
        if (item.DisplayIndex == lvwExample.EditIndex)
        {
            Label label = item.FindControl("lblPhoneNumber") as Label;
            if (label != null)
            {
                // Get here, but row always visible
                label.Attributes.Add("onload",
                    "showOrHidePhoneRow('phoneRow', '" + label.ClientId + "');");
            }
        }
    }
}

Любые указатели будут с благодарностью.

Спасибо, wTs

1 Ответ

1 голос
/ 13 сентября 2010

Проблема здесь в том, что тег asp: label отображается как тег span в html ... и событие onload не существует в теге .. , Таким образом, вы устанавливаете атрибут в нужное время, но вы пытаетесь обработать событие, которое не запускается! Я думаю, что задача состоит в том, чтобы полностью избежать выполнения JavaScript в вашем сценарии и использовать событие сервера для его обработки. Что-то вроде

Protected Sub ListView1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles ListView1.ItemDataBound
    Dim myLabel As Label = e.Item.FindControl("lblPhoneNumber")
    If Not myLabel Is Nothing Then
        e.Item.Visible = IIf(myLabel.Text = "", True, False)
    End If
End Sub

Таким образом, вы обрабатываете каждый элемент и решаете, хотите ли вы скрыть строку, основываясь на значении метки.

...