воскресенье, 4 марта 2012 г.

Redirect с формы на форму просмотра элемента после его создания

Стояла задача - после создания элемента переходить не на страницу с представлением списка, а на форму просмотра этого элемента. Решил делать это с помощью обработчика событий. Redirect можно сделать с помощью метода SPUtility.Redirect, но он выполнится только в синхронном обработчике(для того, чтобы мы могли получить HttpContext), т.е. ItemAdding, но для формирования ссылки на форму просмотра, нам нужен id элемента, а в ItemAdding, Properties.ListItem.ID равен null. Поэтому необходимо сделать обработчик ItemAdded синхронным. Для этого в файле Elements.xml, добавим строку:


<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="100">
      <Receiver>
        <Name>EventReceiver1ItemAdded</Name>
        <Type>ItemAdded</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>EventReceiverMyProject.EventReceiver1.EventReceiver1</Class>
        <SequenceNumber>10000</SequenceNumber>
        <Synchronization>Synchronous</Synchronization>
      </Receiver>
  </Receivers>
</Elements>

В теле обработчика у нас будет:

namespace EventReceiverMyProject.EventReceiver1
{
    public class EventReceiver1 : SPItemEventReceiver
    {
        private readonly HttpContext _thisContext;
        public EventReceiver1()
        {
            if (HttpContext.Current != null)           
                _thisContext = HttpContext.Current;           
        }

        void ItemAdded(SPItemEventProperties properties)
       {
           using (SPSite thisSite = new SPSite("siteUrl"))
           {
               using (SPWeb site = thisSite.OpenWeb())
               {
                   SPList list = site.Lists["lisName"];
                   int idItem = properties.ListItem.ID;
                   SPUtility.Redirect(list.DefaultDisplayFormUrl +"?ID="+idItem.ToString(),  
                   SPRedirectFlags.Default, _thisContext);
               }
           }
           base.ItemAdded(properties);
       }
    }
}
Так же мы можем определить, какая страница у нас будет открываться, по нажатию на кнопку <Закрыть> в форме просмотра элемента, для этого к строке  list.DefaultDisplayFormUrl +"?ID="+idItem.ToString(), добавим +"&Source=siteUrl", в итоге получится:

 SPUtility.Redirect(list.DefaultDisplayFormUrl +"?ID="+idItem.ToString()+
"&Source=siteUrl", SPRedirectFlags.Default, _thisContext);
Теперь по нажатию <Закрыть>, в форме просмотра, будет происходить Redirect на главную страницу

Комментариев нет:

Отправить комментарий