ASP.NETアプリケーションで、ASP.NETのTableに行を追加すると 「値をNull にすることはできません。パラメーター名:key」のエラーが表示されWebフォームが表示されないことがあります。
エラー
値をNull にすることはできません。パラメーター名:key
例外の詳細: System.ArgumentNullException: 値を Null にすることはできません。
パラメーター名:key
原因
いくつか原因がありますが、一番多いのはnull文字列をTableに追加している場合です。以下のコードを参考にしてください。
エラーの発生するコード
protected void Page_Load(object sender, EventArgs e)
{
int flag=1;
TableRow tr = new TableRow();
TableCell tc = new TableCell();
LiterlControl lc = new LiteralControl();
if (di[i].flag == 0) {
lc.Text += "<div>フラグは0です。</div>";
}
else if (di[i].flag == 2) {
lc.Text += "<div>フラグは2です。</div>";
}
tc.Controls.Add(lc);
tr.Cells.Add(tc);
table1.Rows.Add(tr);
}
上記のコードで”flag=1”(0,2以外)の場合にエラーが発生します。
解説
上記のコードでは常にセルにLiterlControlを挿入しています。flagの値が0,2の場合はLiterlControlのインスタンス作成後Textプロパティに文字列が代入されます。しかし、0,2以外の値の場合にはTextプロパティに値が代入されないためTextプロパティの値はnullになります。TextプロパティがnullのLiterlControlをテーブルのセルに追加すると先の「値をNull にすることはできません。パラメーター名:key」のエラーが表示されます。
対策
対策1 : Textプロパティのnullを防ぐ
どのような場合でもTextプロパティに値が設定されるようにします。Textプロパティをnullにしてテーブルに追加しないようにします。
修正コード例
protected void Page_Load(object sender, EventArgs e)
{
int flag=1;
TableRow tr = new TableRow();
TableCell tc = new TableCell();
LiterlControl lc = new LiteralControl();
if (di[i].flag == 0) {
lc.Text += "<div>フラグは0です。</div>";
}
else if (di[i].flag == 2) {
lc.Text += "<div>フラグは2です。</div>";
}else{
lc.text="";
}
tc.Controls.Add(lc);
tr.Cells.Add(tc);
table1.Rows.Add(tr);
}
上記のコードでエラーは回避できます。
対策2 : Literalを用いる
LiteralControlではエラーが発生しますが、Literalの場合は同じコードでもエラーが発生しません。
修正コード例
protected void Page_Load(object sender, EventArgs e)
{
int flag=1;
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Literl lt = new Literal();
if (di[i].flag == 0) {
lt.Text += "<div>フラグは0です。</div>";
}
else if (di[i].flag == 2) {
lt.Text += "<div>フラグは2です。</div>";
}
tc.Controls.Add(lt);
tr.Cells.Add(tc);
table1.Rows.Add(tr);
}
エラーは回避できますが、LiterlのTextプロパティはnullになっていますので、注意が必要かもしれません。
補足
このエラーは開発環境でデバッグしている際に発生する可能性が高いです。同じプログラムをサーバー(IIS 8,IIS 8.5)で実行した場合は発生しないことがあります。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2014-02-27