2011-04-13 48 views
2

我仍然習慣ASP.net WebForms處理事情的方式,但這仍然讓我感到困惑。在某些情況下,如果某個對象爲空,並且該標記應包含該對象的值,則應該顯示標記。正確的方式來處理ASP.net中的條件PlaceHolder

一個很簡單的例子:

<asp:PlaceHolder runat="server" Visible='<%# myObject != null %>'> 
    <span><%= myObject.Property %></span> 
</asp:PlaceHolder> 

的問題是,它似乎不管知名度ASP.net解析佔位符的內容。上面的代碼與錯誤結束:

Object reference not set to an instance of an object.

有沒有辦法來處理這無需百萬<asp:Literal>的?

+1

儘可能避免使用內聯腳本標記'<% %>'。在你的代碼後面,你可以設置該控件的可見性。 – 2011-04-13 22:27:23

+0

@TheMuffinMan這是有爭議的。正確使用簡單的內聯腳本可以導致更多的聲明性標記。 – 2014-11-28 17:17:21

回答

4

設置佔位符服務器端的可見度(即在後面的代碼)

例如:

this.placeholdername.Visible = true; 

if (myObject == null) 
{ 
    this.placeholdername.Visible = false; 
} 
0

這可能工作:

<asp:PlaceHolder runat="server">  
    <span runat="server" Visible='<%# myObject != null %>'><%= myObject.Property %></span> 
</asp:PlaceHolder> 
4

您也可以做到這一點通過使用內聯條件。

<%if (myObject != null) { %> 
    //Control here 
<% } %> 
1

.net仍將解析子控件,無論父級的可見性如何。所以這是預料之中的。

你當然可以使用文字或只是確保創建一個對象,但也許用一個開關來設置它是否顯示。

另一條路線是使用中繼器並將中繼器綁定到您的對象。如果對象爲空,那麼中繼器不會創建它的子節點...

相關問題