2010-09-13 28 views
1

我想在ASP.Net ListView的EditItemTemplate中的一組控件上設置一些客戶端屬性。ASP.NET上的Javascript函數Listview_ItemCreated

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

回答

1

這裏的問題是,一個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 

這樣你處理每一個項目,並決定是否要隱藏你的行,基於標籤的價值。

+0

這肯定會起作用。我希望有一個客戶端解決方案(爲了可重用性,並且因爲我的實際頁面比我提出的問題稍微複雜一些)。如果我沒有獲得客戶端選擇,我會將其標記爲答案。 – 2010-09-13 15:42:42