Question

Je suis en train de définir certaines propriétés côté client sur un ensemble de contrôles dans le EditItemTemplate d'un ASP.Net ListView.

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

Je suis en train d'ajouter un appel à cette fonction dans le code-behind, mais je ne sais pas comment. Il semble onload est 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 + "');");
            }
        }
    }
}

Les pointeurs serait grandement apprécié.

Merci, WTS

Était-ce utile?

La solution

Le problème ici est qu'un asp: label balise est rendu en tant que durée dans le code 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 le soution est complet éviter javascript exécution dans votre scénario et utiliser l'événement de serveur pour 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, en fonction de la valeur de l'étiquette.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top