1

새 웹 응용 프로그램 만들기 (Visual Studio 2008 버전 9.0.30729.1 SP 사용)Asp.net/Ajax 버그입니까? 자바 스크립트 오류 및 객체 데이터 소스

Aspx 페이지에서 양식 태그를 다음과 같이 바꿉니다.

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가 삭제된다는 것입니다.

BusinessDescription 이벤트는 비즈니스 오브젝트 (이 컨텍스트에서 사용자 페이지가되는 비즈니스 오브젝트)의 인스턴스가 h 제되기 전에 항상 발생합니다. 비즈니스 오브젝트가는 IDisposable 인터페이스를 구현하는 경우이 이벤트가 발생한 후에는 폐기 메소드가 호출 (페이지는 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 메서드가 호출됩니다 (예 : Control> TemplateControl> Page http://msdn.microsoft.com/en-us/library/system.web.ui 페이지 IDisposable 구현). .webcontrols.objectdatasource.objectdisposing (v = vs.80) .aspx – cstruter