2014-02-14 3 views
6

У меня есть следующее требование. Я сохранил список элементов словаря. Я хочу, чтобы словарь был уникальным. Я написал следующий код, как если бы каждый новый элемент сохранялся с существующим именем ключа, он должен вызывать предупреждение, например «Item уже существует».Показать предупреждение при возникновении событий

То, что я делаю, похоже на сравнение значения ключа с существующими клавишами словаря при сохранении элемента. Я написал код в событии ItemSaving.

public class IsItemExist 
    { 
     Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master"); 

     public void OnItemSaving(object sender, EventArgs args) 
     { 

      Item dbItem = master.GetItem("/sitecore/content/Administration/Development Settings/Lookups"); 
      Item selectedItem = Event.ExtractParameter(args, 0) as Item; 
      foreach (Item item in dbItem.Axes.GetDescendants()) 
      { 
       if (item.Template.Name.Contains("entry")) 
       { 
        if (item.Fields["Key"].Value == selectedItem.Fields["Key"].Value) 
        { 
         Sitecore.Context.ClientPage.ClientResponse.Alert("Item is already exist"); 
        } 
       } 
      } 

     } 


    } 

запись web.config

<event name="item:saving"> 
<handler type="CustomEvent.IsItemExist, CustomEvent" method="OnItemSaving"/> 
</event> 

Это показывает предупреждающее сообщение, и я в состоянии сохранить элемент. 1. Я не хочу снова сохранять элемент с повторяющимся значением. 2. Я получаю 2 оповещения, когда нажимаем кнопку save.why?

любая помощь будет .. Ребят было оценено

ответ

6

Вы должны добавить свой обработчик события item:adding и установить Cancel свойство результата событий в true:

<event name="item:adding"> 
    <handler type="CustomEvent.DoesItemExist, CustomEvent" method="OnItemAdding" /> 
    </event> 
public class DoesItemExist 
{ 
    Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master"); 

    public void OnItemAdding(object sender, EventArgs args) 
    { 
     Item dbItem = master.GetItem("/sitecore/content/Administration/Development Settings/Lookups"); 
     Item selectedItem = Event.ExtractParameter(args, 0) as Item; 
     foreach (Item item in dbItem.Axes.GetDescendants()) 
     { 
      if (item.Template.Name.Contains("entry")) 
      { 
       if (item.Fields["Key"].Value == selectedItem.Fields["Key"].Value) 
       { 
        SitecoreEventArgs evt = args as SitecoreEventArgs; 
        evt.Result.Cancel = true; 
        Sitecore.Context.ClientPage.ClientResponse.Alert("Item already exists"); 
       } 
      } 
     } 
    } 
} 
Смежные вопросы