Я создал настраиваемое поле в и пустом проекте sharepoint, и я переопределил FieldRenderingControl, поэтому я могу создать свой собственный макет таблицы, когда отображается элемент в списке.Custom FieldRenderingControl Sharepoint 2010
Проблема, с которой я столкнулась, заключается в том, что 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);
}
}
}
}
}
И наконец, Markup
<%@ 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>
Можем ли мы увидеть разметку/код, который вы использовали для этого? –
Спасибо, что посмотрели. Я разместил код и разметку. В классе FieldRenderingControl он в настоящее время читает ListItemFieldValue, потому что я пытаюсь использовать каждое свойство, но изначально я начал с ItemFieldValue. – Maxmanzero
После публикации этого я сделал несколько вещей, чтобы попытаться заставить его работать правильно. Я жестко закодировал данные, которые должны появиться в этом поле, чтобы убедиться, что есть значение, которое будет передано на дисплей, редактировать и новые виды. Я также загрузил несколько примеров, которые работают и сравнивают их с моими собственными, и все выглядит по порядку. Я просто не понимаю, почему значение в представлении списка не передается в окно модального окна. – Maxmanzero