JavaScript函数在ASP.NET listView_itemcreated上
-
02-10-2019 - |
题
我正在尝试在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
这样,您可以处理每个项目,并决定是否要隐藏标签的值。
不隶属于 StackOverflow