2011-12-09 8 views
0

私は、オブジェクトのリストにバインドされた単純なリピーターを持っています。オブジェクトには、レンダリングのための一連のストリングが入っています。リピーターのTargetInvocationException

オブジェクトは、次のようである:

ループが問題を引き起こしていなかったことを確認するには、次のコードを使用してレンダリング
class BestPractice 
    { 
     public string Title { get; set; } 
     public string Author { get; set; } 
     public string Body { get; set; } 
    } 

List<BestPractice> BestPractices = new List<BestPractice>(); 
foreach (SPListItem item in items) 
       { 
        BestPractice bp = new BestPractice(); 
        bp.Author = "test";//(string)item["Author"]; 
        bp.Body = "test";// (string)item["Body"]; 
        bp.Title = "test";// (string)item["Title"]; 
        BestPractices.Add(bp); 
       } 

       BPRepeater.DataSource = BestPractices; 
       BPRepeater.DataBind(); 

私が確認するために、コードを強化しましたリストには項目が含まれていて、その項目にはデータが取り込まれる前に文字列が入力されていました。

[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] 
     public void @__DataBind__control4(object sender, System.EventArgs e) { 
      System.Web.UI.WebControls.RepeaterItem Container; 
      System.Web.UI.DataBoundLiteralControl target; 
      target = ((System.Web.UI.DataBoundLiteralControl)(sender)); 
      Container = ((System.Web.UI.WebControls.RepeaterItem)(target.BindingContainer)); 
      target.SetDataBoundString(0, System.Convert.ToString(DataBinder.Eval(Container.DataItem, "Author"), System.Globalization.CultureInfo.CurrentCulture)); 
     } 

次の例外そのものです:例外は.g.csファイルにここで起こる

System.Reflection.TargetInvocationException was unhandled by user code 
    Message=Property accessor 'Author' on object 'Carpool_Webparts.Offer_Details.BestPractice' threw the following exception:'Carpool_Webparts.Offer_Details.BestPractice.get_Author()' 
    Source=System 
    StackTrace: 
     at System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) 
     at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) 
     at System.Web.UI.DataBinder.Eval(Object container, String[] expressionParts) 
     at Carpool_Webparts.Offer_Details.Offer_Details.__DataBind__control4(Object sender, EventArgs e) 
     at System.Web.UI.Control.OnDataBinding(EventArgs e) 
     at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) 
     at System.Web.UI.Control.DataBindChildren() 
    InnerException: System.MethodAccessException 
     Message=Carpool_Webparts.Offer_Details.BestPractice.get_Author() 
     Source=mscorlib 
     StackTrace: 
      at System.Reflection.MethodBase.PerformSecurityCheck(Object obj, RuntimeMethodHandle method, IntPtr parent, UInt32 invocationFlags) 
      at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
      at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
      at System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) 
     InnerException: System.Security.SecurityException 
      Message=Request for the permission of type 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. 
      Source=mscorlib 
      StackTrace: 
       at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed) 
       at System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Object assemblyOrString, SecurityAction action, Boolean throwException) 
       at System.Security.PermissionSetTriple.CheckSetDemand(PermissionSet demandSet, PermissionSet& alteredDemandset, RuntimeMethodHandle rmh) 
       at System.Security.PermissionListSet.CheckSetDemand(PermissionSet pset, RuntimeMethodHandle rmh) 
       at System.Security.PermissionListSet.DemandFlagsOrGrantSet(Int32 flags, PermissionSet grantSet) 
       at System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32 permission, PermissionSet targetGrant, CompressedStack securityContext) 
       at System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32 permission, PermissionSet targetGrant) 
      InnerException: 

私は完全に失われています:(

答えて

1

を、私は100%確かではないよ、何具体的な問題はありますが、エラーメッセージに基づいて、私は2つの可能な変更を提案します:

1)BestPracticeクラスが公開されていることを確認します。それが動作しているかどうかを確認してください)。

2)自動実装されたプロパティをメンバーバッキングプロパティに変更します。内部の例外は、get_Authorアクセサ上にセキュリティ例外があることを示しています。これは、自動実装がそれと関係する可能性があると私に信じさせます。

+0

クラスはパブリックではありませんでしたが、ループと同じ名前空間にあったため、ループは問題なく実行されました。 databind()コードは、実際に別のクラスで実行されますが、クラスがpublicでない限り、databind()はアクセスできません。これはコンパイル時にキャッチするのがいいと思われるもののようですが、なぜそうでないのか理解しています。 – Wesley

1

最新バージョンのアセンブリがSharePointに表示されていることを確認してください。これを実現する最も信頼できる方法は、dllがWebアプリケーションのbinフォルダにないことを確認することです(存在する場合はそこから削除してください)。そして、最新のビルドされたバージョンをGACにコピーします。エラーが解消された場合は、デプロイメントプロセスをそれぞれ修正してください。

関連する問題