2010-09-13 10 views
1

J'essaie de définir des propriétés côté client sur un ensemble de contrôles dans le EditItemTemplate d'un ListView ASP.Net.Fonction Javascript sur ASP.NET Listview_ItemCreated

Par exemple, si le EditItemTemplate contient quelque chose comme ceci:

<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> 

Je veux montrer que la ligne s'il est en fait un numéro de téléphone, de sorte que JavaScript est quelque chose comme:

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"; 
} 

J'essaie d'ajouter un appel à cette fonction dans le code-behind, mais je ne sais pas comment. Il semble que le chargement soit trop tard.

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 + "');"); 
      } 
     } 
    } 
} 

Tous les pointeurs seraient grandement appréciés.

Merci, WTS

Répondre

1

Le problème ici est qu'un asp: label d'étiquette est rendu par une balise span dans le html ... et l'événement onload n'existe pas dans la balise. .. Donc vous définissez l'attribut au bon moment, mais vous essayez de gérer un événement qui ne se déclenche pas! Je pense que la solution est d'éviter l'exécution javascript dans votre scénario et d'utiliser l'événement serveur pour le gérer. Quelque chose comme

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 

De cette façon, vous gérez chaque article et de décider si vous voulez masquer votre ligne, sur la base de la valeur de l'étiquette.

+0

Cela fonctionnera certainement. J'espérais une solution côté client (pour la réutilisation, et parce que ma page actuelle est un peu plus complexe que la question que j'ai présentée). Je vais marquer ceci comme la réponse si je n'obtiens pas une alternative côté client. –