2

やあみんな、私のデータベースのテーブルには、「Nulls」を許可する「説明」フィールドがあります。これにより、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'.

私の見方では、2つの選択肢があります。

  • ロード中にバインド

また

  • テーブルをNULL以外のテーブルにし、代わりに空の値を使用します

誰かがおそらくより良いアイデアを持っていますか?

4

4 に答える 4

5

DBNull文字列にキャストすることはできませんが、ToString()空の文字列を返すメソッドがあります。私はこのようにするかもしれません:

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

そうすれば、テストする必要はありませんDBNullString.ToString()文字列をDBNull.ToString()返すだけで、空の文字列を返します。Evalこれには、行ごとに2回ではなく1回だけ呼び出すという利点もあります。あなたをつまずかせる可能性がある唯一のことは、データにnullとの両方が含まれている場合DBNullです(ToStringを呼び出すことはできませんnullが、オンにすることはできますDBNull)が、この場合は実際には不可能だと思います。

于 2011-05-24T23:20:22.750 に答える
1

(string)Eval( "Description")を次のように置き換えることができます。

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

于 2011-05-24T23:16:51.880 に答える
1

まず、値がnullかどうかを確認する必要があります。IsDBNull()を使用してnullをチェックできます 。

あなたが使うことができます

IIf(IsDBNull(DataRow("Test")), "Do if true", String.Empty)
于 2011-05-24T23:17:02.700 に答える
0

このようなものが機能するはずです。私はあなたのためにそれをテストしていません。

<%# HttpUtility.HtmlDecode(Eval("Description") == System.DBNull ? String.Empty : (string(Eval("Description")) %>
于 2011-05-24T23:16:53.300 に答える