2016-04-06 3 views
1

Нужно добавить уникальный идентификатор свойства в закладке композитора, что это лучший способ сделать это, и вот моя попытка:добавить уникальное свойство идентификатора к блоку Composer EPiServer

[PageTypeProperty(
      EditCaption = "UniqueID", 
      HelpText = "UniqueID", 
      Type = typeof(PropertyString), 
      //DisplayInEditMode=false, 
      Tab = typeof(ComposerTab))] 
     public virtual Guid UniqueID 
     { 
      get { return UniqueID; } 
      set { UniqueID = System.Guid.NewGuid(); } 
     } 

Целевое поведение: каждый раз, когда новое текстовое поле добавляется на страницу, ему должен быть присвоен уникальный идентификатор.

Проблема с этим куском кода я не вижу уникальный идентификатор, введенный в текстовое поле, когда в Composer - Edit Mode (когда я проверить свойства этого блока контента)

Прокомментируйте правильно для установки этого свойства GUID и где. Благодаря!

Позже изменения:

http://tedgustaf.com/blog/2011/9/create-episerver-composer-function-with-page-type-builder/ Этот пример описывает мой подход

Block.cs

namespace MyProject.ComposerFunctions 
{ 
    [PageType("70421202Efdghajkfgkjd43535", 
    Name = "Block", 
    Description = "Block", 
    Filename = "Block.ascx")] 
    public class Block : BaseComposerFunctionData 
    { 
     [PageTypeProperty(
      EditCaption = "UniqueID", 
      HelpText = "UniqueID", 
      Type = typeof(PropertyString), 
      //DisplayInEditMode=false, 
      Tab = typeof(ComposerTab))] 
     public virtual Guid UniqueID 
     { 
      get { return UniqueID; } 
      set { UniqueID = System.Guid.NewGuid(); } 
     } 

    } 
} 

Block.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Block.ascx.cs" Inherits="MyProject.ComposerControls.Block" %> 

Block.ascx.cs

namespace MyProject.ComposerControls 
{ 
    public partial class Block : Dropit.Extension.Core.BaseContentFunction 
    { 

     protected override void OnLoad(EventArgs e) 
     { 
      if (!IsPostBack) 
      { 

       this.DataBind(); 

      } 
     } 
    } 
} 

BaseContentFunction происходит от UserControl, IPageSource, IFunctionSource BaseComposerFunctionData происходит от TypedPageData

+0

Этот код выглядит так, что это приведет к исключениям переполнения стека ... Где ваше поле поддержки для свойства? –

+0

Тед: Я добавил детали в исходное сообщение. Отвечает ли это на ваш вопрос? – dear1

ответ

0

Я не уверен, что бросить курить, если это будет работать, но вы могли бы попробовать следующее в вашем Block.cs?

[PageTypeProperty(
      EditCaption = "UniqueID", 
      HelpText = "UniqueID", 
      Type = typeof(PropertyString), 
      //DisplayInEditMode=false, 
      Tab = typeof(ComposerTab))] 
     public virtual Guid UniqueID { get; set; } 

     public override void SetDefaultValues(ContentType contentType) 
     { 
      UniqueID = System.Guid.NewGuid(); 
     } 
+0

Спасибо вам за это! К сожалению, я получаю 'Ошибка 'MyProject.Templates.ComposerFunctions.BCATextBlock.SetDefaultValues ​​(System.Net.Mime.ContentType)': не найдено подходящего метода для переопределения \t' на линии SetDefaultValues ​​ – dear1

+0

ах, это было впервые реализовано в episerver 7+. Извини :( – andreasnico

Смежные вопросы