Правильный способ обработки условного PlaceHolder в ASP.net - PullRequest
2 голосов
/ 14 апреля 2011

Я все еще привыкаю к ​​тому, как ASP.net WebForms обрабатывает вещи, но этот вопрос все еще меня озадачивает. В некоторых случаях у меня есть разметка, которая должна отображаться, если объект является нулевым, и эта разметка должна содержать значения из этого объекта.

Очень простой пример:

<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>?

Ответы [ 4 ]

4 голосов
/ 14 апреля 2011

Этого также можно добиться с помощью встроенного условия.

<%if (myObject != null) { %>
    //Control here
<% } %>
4 голосов
/ 14 апреля 2011

Установите видимость серверной части заполнителя (т.е. в вашем коде позади)

пример:

this.placeholdername.Visible = true;

if ( myObject == null ) 
{
    this.placeholdername.Visible = false; 
}
1 голос
/ 14 апреля 2011

.Net по-прежнему будет анализировать дочерние элементы управления независимо от видимости родительского элемента управления.Так что это ожидаемо.

Вы, конечно, можете использовать литералы или просто убедиться, что объект создан, но, возможно, с переключателем, который устанавливает, будет ли он отображаться.

Другим способом будет использованиеПовторитель и привязка данных к вашему объекту.Если объект нулевой, то ретранслятор не собирается создавать своих детей ...

0 голосов
/ 14 апреля 2011

Это может сработать:

<asp:PlaceHolder runat="server">    
    <span runat="server" Visible='<%# myObject != null %>'><%= myObject.Property %></span>
</asp:PlaceHolder>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...