Стояла задача - после создания элемента переходить не на страницу с представлением списка, а на форму просмотра этого элемента. Решил делать это с помощью обработчика событий. 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 на главную страницу
Комментариев нет:
Отправить комментарий