2014-04-22 3 views
1

저는 UpdatePanel, Repeater 및 ObjectDataSource를 사용하는 응용 프로그램을 개발했습니다. 그때 내가 같은 오류가 발생하고,이 세 가지를 사용 할 때UpdatePanel Repeater ObjectDataSource 오류가 발생했습니다.

문제는 "Sys.WebForms.PageRequestManagerServerErrorException : 호출 대상이 예외가 throw되었습니다."

IE8에서 내 로컬 컴퓨터가 잘 작동하지만 IE에서 응용 프로그램을 호스팅 할 때 IE8이 모든 브라우저가 정상적으로 작동하는 모든 브라우저를 리팩팅하는 문제를 만들었습니다.

내 Qfx.Bases.data.DataManager 클래스에서 내 InstrumentSelectionBox.ascx 제어

에서 언급 한 코드 위에

<asp:HiddenField runat="server" ID="hdnKey" Value="mainAlt" /> 

     <qfx:label runat="server" ID="Label1" CssClass="subHeading" Text="term_Shares"></qfx:label> 
     <asp:Repeater ID="rptShareTypeList" runat="server"> 
      <HeaderTemplate> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <div class="shareItem"> 
       <span class="shareItemButton"></span> 
       <span class="shareItemLabel"> 
       <%#IRAppMgr.Translate(Convert.ToString(Eval("title"))) %> 
       <input style="display: none" class="ShareTypeCheckBox" type="checkbox" name='<%# Eval("key") %>' value="<%#Eval("Code") %>" <%# Eval("checked12") %> /> 
       <input class="ShareColor" type="hidden" value="<%#Eval("Color") %>" /> 
       <input class="ShareCurrency" type="hidden" value="<%#Eval("Currency") %>" /> 
       </span> 
       </div> 
      </ItemTemplate> 
      <FooterTemplate></FooterTemplate> 
     </asp:Repeater> 
     <asp:ObjectDataSource ID="SharesTypeDS" runat="server" DataObjectTypeName="Qfx.DataClasses.Config.Option" 
      SelectMethod="SelectShareType" TypeName="Qfx.Bases.data.DataManager"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="ClientMarker" Name="appConfig" PropertyName="Config" 
        Type="Object" /> 
       <asp:ControlParameter ControlID="ClientMarker" Name="client" PropertyName="Client" /> 
       <asp:Parameter Name="selection" DefaultValue="ShareType" /> 
      </SelectParameters> 
     </asp:ObjectDataSource> 

아래에 언급 된 코드

public List<Option> SelectShareType(object appConfig, string client, string selection, string ShareKey) 
    { 
     AppConfig config = (AppConfig)appConfig; 
     List<Option> Options = null; 
     if (config.getSelectionByKey(ShareKey + selection) != null) 
      Options = config.getSelectionByKey(ShareKey + selection).Options; 
     if (Options != null && Options.Count > 0) 
     { 
      foreach (Option option in Options) 
      { 
       if (option.Currency == null && IRAppManager.Manager != null) 
       { 
        DataClasses.Share.Instrument inst = IRAppManager.Manager.GetInstrument(option.Key); 
        option.Currency = (inst != null) ? IRAppManager.Manager.Translate(inst.Currency) : ""; 
       } 
       if (option.VolumeDivisor == null || option.VolumeDivisor.Trim() == string.Empty) 
        option.VolumeDivisor = option.VolumeValue; 
       option.Code = (config.GetDataSourceByKey(option.Key) != null) ? config.GetDataSourceByKey(option.Key).Code : ""; 
       if (option.Code != string.Empty) 
       { 
        option.TimeStamp = GetTimeStampDetail(option.Code); 
       } 
      } 
     } 
     return (config.getSelectionByKey(ShareKey + selection) != null) ? config.getSelectionByKey(ShareKey + selection).Options : new List<Option>(); 
    } 

및 I 업데이트 판에서 이것을 사용했습니다.

<asp:UpdatePanel ID="upTab" runat="server"> 
       <ContentTemplate> 
        <uc:InstrumentSelectionBoxrunat="server" ID="UTCInstrumentSelectionBox"></uc:InstrumentSelectionBoxrunat> 
       </ContentTemplate> 
      </asp:UpdatePanel> 

브라우저 콘솔에서 일부 디버깅을 한 후 ObjectDataSource로 인해 오류가 발생하여 ObjectDataSource를 제거하고 ID가있는 일반 리피터를 바인딩 한 다음 IE8에서 정상적으로 작동합니다.

그래서 누구나 plese가 IE8에서 ObjectDataSource를 사용하거나 코드에 오류가있는 경우 제한이 있음을 알 수 있습니다. 귀하의 회중은 매우 만족해야합니다. 감사합니다.

답변

1

ObjectDataSource 함수/메소드를 호출하기 위해 reflection을 사용하십시오. 특수한 방법으로 예외가 발생했을 수 있습니다. 여기 reference thread입니다, 방법을 통해 가서 디버깅하십시오.

+0

응용 프로그램을 테스트 한 결과 Internet Explorer 8에서만 메타 태그를 추가해야합니다. –

+0

메소드를 디버깅 했습니까? 호출하는 곳 어디에도 예외/호출이 없습니다. –

+0

예 디버그가 있고 한 곳에서 다른 브라우저에서 가져 오는 동안 개체 참조가 IE8의 개체 인스턴스로 설정되지 않은 것과 같은 오류가 발생했습니다. –