1

新しいWebアプリケーションをこれでフォームタグを置き換える、ASPXページではこれはAsp.net/Ajaxのバグですか? Javascriptのエラーとオブジェクトデータソース

(Iは、Visual Studio 2008のバージョン9.0.30729.1 SPを使用しています)を作成します(タイプを変更する必要があります

public IEnumerable<string> Data() 
{ 
    return new string[] { "some data", "foo", "bar" }; 
} 

そして、このイベントハンドラを追加します:

を、サーバーのページで

<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True" /> 
    <div> 
     <asp:DropDownList runat="server" DataSourceID="ObjectDataSource1"> 
     </asp:DropDownList> 
     <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Data" TypeName="WebApplication1.WebForm2" 
      OnObjectCreating="ObjectDataSource1_ObjectCreating"></asp:ObjectDataSource> 
    </div> 
    </form> 

)ページ名と一致し、この機能を追加するために名前を付けます

protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e) 
{ 
    e.ObjectInstance = this; 
} 

ここでアプリケーションを実行します。私は "Sys is undefined"というスクリプトエラーが出ます。自動スクリプトの大部分は完全に欠落しています。あなたがアプリケーションを実行すると、オブジェクトのインスタンスのラインアウトコメントに

protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e) 
{ 
    //e.ObjectInstance = this; 
} 

は今、何のスクリプトエラーはありません。

ここでは何が起こっていますか?

+0

'[WebMethod]'を 'Data'に入れてみましたか? –

+0

ちょうど試しましたが、違いはありません。あなたはこれを再現できますか? – asawyer

答えて

6

ここでは、ページが終了する前にObjectDataSourceが破棄されることが考えられます。

ObjectDisposingイベントは、ビジネスオブジェクト(このコンテキストではあなたのページであるビジネスオブジェクト)のインスタンスが破棄される前に常に生成されます。ビジネス・オブジェクトがIDisposableインターフェイスを実装している場合、このイベントが発生した後、Disposeメソッドが呼び出される(ページがIDisposableを例えば制御> TemplateControl>ページ

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.objectdisposing(v=vs.80).aspx

はあなたがonobjectdisposingを経由して、オブジェクトの廃棄をキャンセルする必要がある実装します。イベントなど

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Data" TypeName="WebApplication1.WebForm2" 
     OnObjectCreating="ObjectDataSource1_ObjectCreating" 
     onobjectdisposing="ObjectDataSource1_ObjectDisposing"></asp:ObjectDataSource> 

ハンドラ:

protected void ObjectDataSource1_ObjectDisposing(object sender, ObjectDataSourceDisposingEventArgs e) 
{ 
    e.Cancel = true; 
} 

興味深いデザインTハフ?一般的に私はobjectdatasourceメソッドを別のクラスに置くことを好みます。

+0

オブジェクトの呼び出しを追加すると、エラーがクリアされたようです。ライフサイクルが終了する前にページが処分されるのはなぜですか? ODSがやっていることですか? – asawyer

+0

はい、面白いです...私はこのパターンを頻繁に使用するいくつかのアプリケーションを継承しています。 – asawyer

+0

ObjectDisposingイベントは、ビジネスオブジェクト(このコンテキストではあなたのページであるビジネスオブジェクト)のインスタンスが破棄される前に常に生成されます。ビジネスオブジェクトがIDisposableインターフェイスを実装している場合、このイベントが発生した後にDisposeメソッドが呼び出されます(ページはIDisposableを実装します。たとえば、Control> TemplateControl> Page http://msdn.microsoft.com/en-us/library/system.web.ui .webcontrols.objectdatasource.objectdisposing(v = vs80).aspx – cstruter

関連する問題