我正在尝试在ASP.NET ListView的EditiTemTemplate中的一组控件上设置一些客户端属性。

例如,如果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

有帮助吗?

解决方案

这里的问题是 ASP:标签 标签被渲染为 跨度 在html中标记...标签中不存在onload事件...因此您在正确的时间设置了属性,但是您正在尝试处理未触发的事件!我认为Soution是在您的情况下完成避免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

这样,您可以处理每个项目,并决定是否要隐藏标签的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top