Pregunta

Estoy tratando de establecer algunas propiedades del lado del cliente en un conjunto de controles en el EditItemTemplate de un ASP.Net ListView.

Por ejemplo, si el EditItemTemplate contiene algo como esto:

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

Quiero mostrar sólo la fila si en realidad hay un número de teléfono, por lo que JavaScript es algo como:

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

Estoy intentando añadir una llamada a esta función en el código subyacente, pero no estoy seguro de cómo. Parece proceso de carga es demasiado tarde.

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

Cualquier punteros sería muy apreciada.

Gracias, WTS

¿Fue útil?

Solución

El problema aquí es que un asp: label se representa como un lapso en el html ... y el proceso de carga no existe en la etiqueta ... Así que va a configurar el atributo en el momento adecuado, pero usted está tratando de controlar un evento que no consigue despedido! Creo que el soution es para evitar la ejecución completa Javascript en su escenario y utilizar el evento del servidor de manejarlo. Algo así como

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

Esta forma de manejar cada artículo y decidir si desea ocultar su fila, en base al valor de la etiqueta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top