DBNull в строку в встроенных выражениях ASP.NET имеет ошибку приведения - PullRequest
2 голосов
/ 25 мая 2011

Эй, ребята, в таблице в моей базе данных есть поле "Описание", которое разрешает пустые значения.Это вызывает проблему при рендеринге страницы в ASP.NET, так как я хочу убедиться, что я декодирую строку по мере ее поступления из базы данных, так как я кодирую ее при входе. Естественно, в описании есть несколько NULL.поле, которое я хотел бы сохранить.

Так что моя страница ASP.NET имеет этот код

<asp:TextBox ID="DescInfo" Text='<%# HttpUtility.HtmlDecode((string)Eval("Description")) %>' />

Так что, когда я рендеринг страницы, я получу:

Unable to cast object of type 'System.DBNull' to type 'System.String'.

С моей точки зрения, у меня есть два варианта:

  • привязка при загрузке

ИЛИ

  • сделать таблицуненулевой таблицы и использовать пустые значения вместо

У кого-нибудь есть идея получше?

Ответы [ 4 ]

5 голосов
/ 25 мая 2011

Хотя DBNull нельзя привести к строке, у него есть метод ToString(), который возвращает пустую строку. Я мог бы сделать это так:

<%# HttpUtility.HtmlDecode(Eval("Description").ToString()) %>

Таким образом, вам не нужно проверять DBNull или что-то еще. String.ToString() просто возвращает строку, а DBNull.ToString() возвращает пустую строку. Это также имеет преимущество в том, что вы вызываете Eval только один раз в строке вместо двух. Единственное, что может сбить вас с толку, это если ваши данные содержат как null, так и DBNull (вы не можете вызвать ToString для null, но вы можете для DBNull), но я не думаю, что это на самом деле возможно в это дело.

1 голос
/ 25 мая 2011

Сначала необходимо проверить, является ли значение нулевым. Вы можете использовать IsDBNull () для проверки на нулевые значения.

Вы можете использовать

IIf(IsDBNull(DataRow("Test")), "Do if true", String.Empty)
1 голос
/ 25 мая 2011

Вы можете заменить (string) Eval ("Description") на:

(Eval("Description") is System.DBNull) ? String.Empty : Eval("Description")

0 голосов
/ 25 мая 2011

Нечто подобное должно работать.Я не проверял это для вас.

<%# HttpUtility.HtmlDecode(Eval("Description") == System.DBNull ? String.Empty : (string(Eval("Description")) %>
...