TargetInvocationException на повторителе - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть простой повторитель, привязанный к списку объектов, объект, содержащий серию строк для рендеринга.

Объект выглядит следующим образом:

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();

Я прошел по коду, чтобы убедиться, что список содержит элемент, и что этот элемент имел заполненные строки до того, как был связан с данными. Исключение происходит здесь в файле .g.cs:

[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));
        }

Следующее исключение само по себе:

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: 

Я полностью потерян: (

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Убедитесь, что самая свежая версия сборки видна для SharePoint. Самый надежный способ добиться этого - убедиться, что dll НЕ находится в папке bin веб-приложения (удалите ее оттуда, если она там есть) и скопируйте последнюю собранную версию в GAC. Если ошибка исчезла - отрегулируйте процесс развертывания соответственно.

1 голос
/ 09 декабря 2011

Я не уверен на 100%, в чем конкретно заключается проблема, но на основании сообщения об ошибке я бы предложил два возможных изменения:

1) Убедитесь, что класс BestPractice является общедоступным (вы можете усилить экспозициюпонизьте уровень, когда вы убедитесь, что он работает или не работает).

2) Измените автоматически реализованные свойства на свойства, поддерживаемые членами.Внутреннее исключение указывает, что существует исключение безопасности для метода доступа get_Author, что заставляет меня поверить, что автоматическая реализация может иметь к этому отношение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...