2011-12-13 99 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