2012年6月17日日曜日

DOT.NETエラー集



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 件のコメント: