Пользовательское поле Sharepoint - PullRequest
2 голосов
/ 19 июля 2011

Я создал собственный тип поля, я думаю, что ошибок нет, потому что это так просто, но поле формы не отображается в форме (см. Рис.)

pic

.ascx file:

 <SharePoint:RenderingTemplate ID="MyField" runat="server">
 <Template>
 <asp:TextBox ID="TextField" MaxLength="255" runat="server" BackColor="Pink"
 Font-Bold="true" BorderStyle="Dotted" BorderColor="DarkBlue" TextMode="MultiLine" />
 </Template>
 </SharePoint:RenderingTemplate>

Тип поля файла:

namespace MyCustomField.CustomField
{
class SPFieldMyCustomField : SPFieldMultiLineText
{

    public SPFieldMyCustomField(SPFieldCollection fields, string fieldName) : base(fields, fieldName)
    {
    }

    public SPFieldMyCustomField(SPFieldCollection fields, string typeName, string displayName)
        : base(fields, typeName, displayName)
    {
    }

    public override BaseFieldControl FieldRenderingControl
    {
        get
        {
            BaseFieldControl control = new MyCustomFieldControl();
            control.FieldName = base.InternalName;

            control.ControlMode = SPControlMode.Display;

            return control;
        }
    }
}
}

и контрольный файл:

namespace MyCustomField.CustomField
{
internal class MyCustomFieldControl : RichTextField
{
    protected override void CreateChildControls()
    {
        ControlMode = SPControlMode.Display;

        base.CreateChildControls();
    }

    protected override void RenderFieldForDisplay(HtmlTextWriter output)
    {
        var html = String.IsNullOrEmpty(Item[Field.InternalName] as string) ? "" : Item[Field.InternalName] as string;

        RenderHtmlForDisplay(output, html);
    }

    protected override string DefaultTemplateName
    {
        get
        {
            return "MyField"; 
        }
    } 
}
}

Как видите, TextBox не отображается.

1 Ответ

3 голосов
/ 19 июля 2011

Похоже, что элемент управления настроен только на SPControlMode.Display. Ваш скриншот отображается в режиме Edit или New

Похоже, вы захотите переопределить RenderFieldForInput метод

protected override void RenderFieldForInput(HtmlTextWriter output)
{
    var html = String.IsNullOrEmpty(Item[Field.InternalName] as string) ? "" : Item[Field.InternalName] as string;

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