私は、オブジェクトのリストにバインドされた単純なリピーターを持っています。オブジェクトには、レンダリングのための一連のストリングが入っています。リピーターの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:
私は完全に失われています:(
クラスはパブリックではありませんでしたが、ループと同じ名前空間にあったため、ループは問題なく実行されました。 databind()コードは、実際に別のクラスで実行されますが、クラスがpublicでない限り、databind()はアクセスできません。これはコンパイル時にキャッチするのがいいと思われるもののようですが、なぜそうでないのか理解しています。 – Wesley