2014-12-28 2 views
1

Я пытаюсь ограничить символы, отображаемые в элементах управления Label ASP.NET, которые привязаны к базе данных SQL для базы данных SQL. Если поле в базе данных не является NULL, у меня нет никаких проблем. Если они NULL, я получаю исключение «Ссылка на объект не установлена ​​в экземпляр объекта».Как вы обрабатываете значения NULL в элементах управления DataBound?

Мой код выглядит следующим образом:

<asp:Label ID="LabelDescriptionLabel" runat="server" Text='<%# IIf(Not IsDBNull(Item.LabelDescription), IIf(Item.LabelDescription.ToString.Length > 30, Left(Item.LabelDescription, 30) & "...", Item.LabelDescription), Item.LabelDescription)%>' /> 

Я также попытался следующие, без везения:

<asp:Label ID="LabelDescriptionLabel" runat="server" Text='<%# IIf(Not IsNothing(Item.LabelDescription), IIf(Item.LabelDescription.ToString.Length > 30, Left(Item.LabelDescription, 30) & "...", Item.LabelDescription), Item.LabelDescription)%>' /> 

Я использую ASP.NET с VB.NET. Я также попытался использовать метод CSS «text-overflow: ellipsis», но у меня были некоторые проблемы с форматированием таблицы, которые я не разрешил.

Есть ли способ обработать эти значения NULL и предотвратить исключения во время выполнения?

Спасибо!

+2

использовать новый (ish) [If Operator] (http://msdn.microsoft.com/en-us/library/bb513985.aspx) вместо 'IIF' для короткого замыкания оценок. 'IIF' будет оценивать все элементы/предложение так, что' Item.LabelDescription.ToString.Length' вызовет исключение, даже если вы попытались его протестировать. – Plutonix

ответ

1

Одна из проблем, с которой вы сталкиваетесь, состоит в том, что старая IIF - это функция, которая оценивает все детали, прежде чем она решит, что вернуть.

IIF(Not IsDBNull(Item.LabelDescription), TruePart, FalsePart) 

Это не имеет значения, если выражение истинно или нет, TruePart и FalsePart заявления всегда будет выполняться. Поскольку они включают ссылки на то, что может быть DBNull/Nothing/null, вы получаете сообщение об ошибке.

Что-то еще, хотя это то, что ничего не то же самое, что DBNull, и если Item - это объект, который может быть Nothing/null, тогда тестирование описания Nothing/null будет проблематичным.

If Operator доступен с примыкает 2008. Структура такой же, но только оценивает состояние теста и Истинную или ложного выражение, которое применяется:

If(Condition, TruePart, FalsePart) 

«короткое замыкание» предотвращает выражение/Часть, которая не применяется к оценке. Пока остальная часть кода действительна, вы должны просто скопировать один из I с функций IIF.

Поскольку вы хотите объекта Ничего я хотел бы использовать Nothing ключевое слово, а не функции VB IsNothing:

If(Item IsNot Nothing), 
     If(Item.LabelDescription.ToString.Length > 30, x, y), y) 

Если оператор не то же самое, то/блока If/Else заявление.

+1

Это отлично работало с условием IsNothing. Благодаря! – J2Tuner

Смежные вопросы