Пользовательская точка доступа FieldRenderingControl 2010

Я создал настраиваемое поле и пустой проект sharepoint, и я переопределил FieldRenderingControl, чтобы я мог создать свой собственный макет таблицы, когда отображается элемент в списке.

Проблема, с которой я столкнулся, заключается в том, что ItemFieldValue в классе управления рендерингом всегда имеет значение NULL.

Как мне получить значение поля, которое я пытаюсь отобразить?

Это мой класс настраиваемого поля

namespace CustomFieldDefinitions.Fields
{
    public class AttributeField : SPField
    {
        #region Constructors

        /// <summary>
        /// This is a constuctor with two parameters.
        /// </summary>
        /// <param name="fields"></param>
        /// <param name="fieldName"></param>
        public AttributeField(SPFieldCollection fields, string fieldName)
            : base(fields, fieldName)
        {
        }

        /// <summary>
        /// This is a contructor with three parameters.
        /// </summary>
        /// <param name="fields"></param>
        /// <param name="typeName"></param>
        /// <param name="displayName"></param>
        public AttributeField(SPFieldCollection fields, string typeName, string displayName)
            : base(fields, typeName, displayName)
        {
        }

        #endregion

        #region Overridden Properties

        /// <summary>
        /// This ties the control used to support this field with the current implementation of it.
        /// </summary>
        public override BaseFieldControl FieldRenderingControl
        {
            [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
            get
            {
                BaseFieldControl fieldControl = new AttributeFieldControl();
                fieldControl.FieldName = this.InternalName;
                return fieldControl;
            }
        }


        public override object GetFieldValue(string value)
        {
            return base.GetFieldValue(value);
        }

        #endregion

    }
}

И мой класс FieldRenderingControl

namespace CustomFieldDefinitions.FieldControls
{
    public class AttributeFieldControl : BaseFieldControl
    {
        protected Label AttributeValueForDisplay;
        protected TextBox AttributeValueTextbox;

        public override string DisplayTemplateName
        {
            get
            {
                 return "AttributeFieldDisplayControl";
            }
            set
            {
                base.DisplayTemplateName = value;
            }
        }

        protected override string DefaultTemplateName
        {
            get
            {
                 if (this.ControlMode == SPControlMode.Display)
                {
                    return this.DisplayTemplateName;
                }
                else
                {
                    return "AttributeFieldControl";
                }
            }
        }

        protected override void CreateChildControls()
        {
            if (this.Field != null)
            {
                 base.CreateChildControls();

                 this.AttributeValueForDisplay = (Label)TemplateContainer.FindControl("lblAttValue");
                 this.AttributeValueTextbox = (TextBox)TemplateContainer.FindControl("txtAttValue");

                 if (ControlMode == SPControlMode.New || ControlMode == SPControlMode.Edit)
                 {
                     AttributeValueTextbox.Text = Convert.ToString(this.ListItemFieldValue);
                 }
                 else
                 {
                     AttributeValueForDisplay.Text = Convert.ToString(this.ListItemFieldValue);
                 }
            }
        }
    }
}

И наконец разметка

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" %>
<SharePoint:RenderingTemplate ID="AttributeFieldDisplayControl" runat="server">
    <Template>
        <asp:Label ID="lblAttValue" runat="server" BorderColor="Red"></asp:Label>
    </Template>
</SharePoint:RenderingTemplate>
<SharePoint:RenderingTemplate ID="AttributeFieldControl" runat="server">
    <Template>
        <asp:TextBox ID="txtAttValue" runat="server" BorderColor="Red"></asp:TextBox>
    </Template>
</SharePoint:RenderingTemplate>

person Maxmanzero    schedule 08.06.2012    source источник
comment
Можем ли мы увидеть разметку / код, который вы использовали для этого?   -  person Meyer Denney    schedule 08.06.2012
comment
Спасибо за внимание. Я разместил код и разметку. В классе FieldRenderingControl он в настоящее время читает ListItemFieldValue, потому что я пробовал каждое свойство, но изначально я начал с ItemFieldValue.   -  person Maxmanzero    schedule 08.06.2012
comment
С момента публикации я сделал несколько вещей, чтобы попытаться заставить его работать должным образом. Я жестко запрограммировал данные, которые должны отображаться в этом поле, чтобы быть уверенным, что есть значение, которое нужно передать в отображение, редактирование и новые представления. Я также загрузил несколько рабочих примеров и сравнил их со своим собственным, и все в порядке. Я просто не понимаю, почему значение в представлении списка не передается в модальное окно отображения.   -  person Maxmanzero    schedule 11.06.2012
comment
Я также знаю, что он использует мой элемент управления отрисовкой настраиваемого поля, поскольку при открытии формы редактирования я получаю текстовое поле с красной рамкой.   -  person Maxmanzero    schedule 11.06.2012


Ответы (1)


Прилагаю ответ на этот вопрос. Я гигантский придурок. Когда вызывал метод ReadItem моей модели BdcModel, я не устанавливал свойство AttributeValue объекта, который передавался на страницу отображения.

Итак, однажды я добавил, что все работает нормально. Спасибо всем, кто посмотрел этот пост. Прошу прощения, что зря потратил ваше время.

person Maxmanzero    schedule 11.06.2012