2011-12-13 108 views
0

我試圖創建一個c#函數,它隱藏所有傳遞過來的html控件沒有innerhtml的子元素。有人能指出我正確的方向嗎?不確定從哪一個開始。如果沒有innerHtml,隱藏子元素html元素

我使用asp.net 4.這裏是我的HTML結構的例子..

<div id="officeInfo" runat="server"> 
    <h2><%= mlaLocationDTO.Name %></h2> 
    <p><%= mlaLocationDTO.Address.Street1 %></p> 
    <p><%= mlaLocationDTO.Address.Street2 %></p> 
    <p>Tel:<%= mlaLocationDTO.Phone %></p> 
    <p>Fax:<%= mlaLocationDTO.Fax %></p> 
    <p>Email:<%= mlaLocationDTO.Email %></p> 
    <a href="#">Get Directions</a> 
    <a href="#">Submit Your Resume</a> 
</div> 

我的僞功能...

protected void HideHtmlElementsWhenEmpty(Control element) 
{ 
    foreach (Control c in element.Controls) maybe there's a better way than to use a loop 
    { 
     if(c.innerHtml != null) //not sure what to do here 
     { 
      c.Visible = false; 
     } 
    } 
} 

謝謝!

+1

您需要編碼您的HTML輸出。 – SLaks

回答

0

輸出HTML標籤條件:

<%= String.IsNullOrEmpty(mlaLocationDTO.Address.Street1) 
    ? "" 
    : "<p>" + mlaLocationDTO.Address.Street1 + "</p>" %> 

哦,別忘了正確編碼數據庫輸出:Street1可能包含<或其他HTML-不合適的字符,我們不想冒險任何腳本注入...

<%= String.IsNullOrEmpty(mlaLocationDTO.Address.Street1) 
    ? "" 
    : "<p>" + Server.HtmlEncode(mlaLocationDTO.Address.Street1) + "</p>" %> 
+0

感謝Heinzi。我真的很希望能再簡化一點。這就是爲什麼我想通過父元素,只是隱藏沒有內容的東西。此解決方案的工作原理,但有可能訪問控制本身,看看它是否有HTML? – bflemi3

+0

@ bflemi3:就我所知,您只能訪問具有'runat =「sever」'屬性和一些'ID =「...」'的代碼中的元素。這對'

電話:...

'不會有幫助,因爲即使電話號碼是空的,它也會將電話號碼作爲它的InnerHtml。 – Heinzi