Задача: после добавления нового элемента перейти на форму редактирования
Решение: Создаеться EventReciver и добавляется следующий код. На что особенно следует обратить внимание. Ни каким кастомайзингом вы этого не добьетесь, в момент щелчка по кнопке OK просто нет идентификатора записи поэтому и переходить некуда.
Это решение позволяет избежать этой ситуации.
Отдельные комментарии присутствуют в коде.
public override void ItemAdding(SPItemEventProperties properties)
{
// Get a "reference" to the list
SPSite siteColl = new SPSite(properties.SiteId);
SPWeb site = siteColl.OpenWeb(properties.RelativeWebUrl);
SPList list = site.Lists[properties.ListId];
// Вызываем базовый метод и ничего не делаем, если это не наш список
if (!list.DefaultViewUrl.Contains("Lists/Orders"))
{
base.ItemAdding(properties);
return;
}
// А вот тут идет обработка перехода с конкретной страницы, ну не нужен мне этот обработчик везде :)
if (_currentContext.Request.CurrentExecutionFilePath.Contains("CopyListItem.aspx"))
{
base.ItemAdding(properties);
return;
}
// Add the item and fill it with the values from properties
DisableEventFiring();
SPListItem itemToAdd = list.Items.Add();
foreach (SPField field in itemToAdd.Fields)
{
if (!field.Hidden &&
!field.ReadOnlyField &&
field != null &&
field.InternalName != "Attachments")
{
itemToAdd[field.InternalName] = properties.AfterProperties[field.InternalName];
}
}
itemToAdd.Update();
EnableEventFiring();
// Cleanup
site.Dispose();
siteColl.Dispose();
string targetUrlOfNewItem = "DispForm.aspx?ID=" + itemToAdd.ID;
// ВАУ а вот тут Особая уличная магия :)
// Redirect
SPUtility.Redirect(targetUrlOfNewItem,SPRedirectFlags.Default, _currentContext);
}
Комментариев нет:
Отправить комментарий