ASP.NETエラー集
あまりお目にかからないエラーに出会ったのをきっかけに、ASP.NET関連のエラーを集めてみます。
- 「オブジェクトの現在の状態に問題があるため、操作は有効ではありません。」データ量が増えると発生するようであれば、コントロール数の上限を超えたために発生しました。Web.configの設定で回避できます。
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="5001" />
</appSettings>
参考:~ 開発者の憂鬱 ~
- 型 'MyProject.MyMembershipProvider' を読み込めませんでしたMembershipProviderまたはRollProviderのサブクラスをaspxのあるプロジェクトとは別の(クラスライブラリなどの)別のプロジェクトに置いた場合に発生しました。
aspxのあるプロジェクト内でMyMembershipProviderをコードから呼ばない場合、aspxのあるプロジェクトに(この例の場合は)MyProjectを追加しなくてもコンパイルは通りますが、実行時にWeb.configの設定に従ってMyMembershipProviderを使用するときにクラスが見るからず、エラーとなります。
aspxのあるプロジェクトの参照設定に"MyProject"を追加することで解消されます。
- Provider name cannot be null or empty.MembershipProviderまたはRollProviderのサブクラスをaspxのあるプロジェクトとは別の(クラスライブラリなどの)別のプロジェクトに置いた場合に発生しました。
親クラスのMembershipProviderのNameプロパティ―が空文字を返すために発生します。
同じプロジェクト内であればエラーとならないのはなぜかわかりませんが、次のようなコードを追加すると回避できます。
override public string Name
{
get { return "MyMembershipProvider"; }
}
参考:Problem with custom Role Provider
- 'System.Xml.Linq.XElement' に 'XPathSelectElement' の定義が含まれておらず、型 'System.Xml.Linq.XElement' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
LINQ to XMLでXPathSelectElementを使おうとしたら発生。”using System.Xml.XPath;"を追加すると解決する。
参考: Is there something wrong with my System.Xml.Linq library? 無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。...
次のようなDataGridの中にButtonなどを組み込んだ場合に発生する場合があります。
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" Text="Test"
OnCommand="button1_Clicked"
CommandArgument=CommandArgument='<%# Eval("ID") %>'
autoPsotBack="true" />
</ItemTemplate> </asp:TemplateField>
これはViewStateが有効なときに、 Page_LoadのPostBackの処理でDataGridを再バインドするのが原因です。
もしPage_Loadでの再バインドが必要でViewStateを無効にしてもよい場合は、PageあるいはDataGridのViewStateModeを"Disabled"にすればエラーが解消します。ViewStateを有効にしておく必要がある場合は次の要領でPostBack以外のときだけDataGridのバインドを行います。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack
{
//この時だけDataGridのバインドを行う。
}
}
DataGridの再バインドが必要な場合は、上記の例の場合はコマンドイベントで行います。public void button1_Clicked(object sender, EventArgs e) { //ここでDataGridのバインドを行う。 }
参考: Invalid postback or callback argument in ImageButton
コンパイル エラー メッセージ: CS1040: プリプロセッサ ディレクティブは行でスペース以外の最初の文字でなければなりません。
DataGridの中のCommandArgument設定で、次のような文字結合を行うと発生します。CommandArgument='<%# Eval("item1") %>&<%# Eval("item2") %>'
この例の場合は次のように変更すると文字結合を行えます。
CommandArgument='<%# Eval("item1") + "&" + Eval("item2") %>'
エラーそのものは、不適切なコードのために二番目の"#"がコンパイラのプリプロセッセのディレクティブとみなされ、これが行の途中に出現しているために発生しているようです。
0 件のコメント:
コメントを投稿