fonction Javascript est désactivé sur ASP.NET Listview_ItemCreated
-
02-10-2019 - |
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
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.