Я знаю, что это 3 года! но так как нет места в Интернете об обновлении текущего URL!
Я должен был сделать некоторую отладку, и это то, что я придумал! Кстати, я получил подсказку от
topNavigationWeb.Update();
указывает на то, что обновляется список! Подсказка Подсказка!
немного фона! Я хотел обновить быстрые ссылки из списка, когда они добавляют, обновляют и удаляют элемент из списка! В моем списке есть два столбца Title и URL!
Затем я создал проект в VS 2010, его получатель событий, который подключен только к этому списку (сделано в файле elements.xml)
в файле .cs я добавил элемент, элемент удален (не удален;)) и элемент обновлен
публичное переопределение void ItemAdded (свойства SPItemEventProperties)
публичное переопределение void ItemUpdated (свойства SPItemEventProperties)
публичное переопределение void ItemDeleting (свойства SPItemEventProperties)
теперь внутри каждого метода вы можете просто вызвать этот метод!
добавление / обновление
public static void AddQuickLaunchItem(string header, string url, SPWeb web)
{
SPNavigationNodeCollection quickLaunch = web.Navigation.QuickLaunch;
// try to get quick launch header
SPNavigationNode nodeHeader =
quickLaunch.Cast<SPNavigationNode>().Where(n => n.Title == header).FirstOrDefault();
//if header not found create it
if (nodeHeader == null)
{
nodeHeader = quickLaunch.AddAsFirst(new SPNavigationNode(header, url,true));
}
else
{
web.AllowUnsafeUpdates = true;
nodeHeader = quickLaunch.Cast<SPNavigationNode>().Where(n => n.Title == header).First() ;
nodeHeader.Url = url;
web.AllowUnsafeUpdates = false;
}
nodeHeader.Update();
web.Update();
}
первая часть проверяет, существует ли узел, используя заголовок (заголовок)! Я сравниваю между тем, какие заголовки есть, и из элемента списка:
SPNavigationNode nodeHeader =
quickLaunch.Cast<SPNavigationNode>().Where(n => n.Title == header).FirstOrDefault();
эта часть сравнения:
n.Title == header
Я получаю эти значения (header и url / spweb) примерно так:
public static void AddQuickLaunchItem (заголовок строки, URL-адрес строки, веб-сайт SPWeb)
метод, который вызывает вышеупомянутое, будет выглядеть так:
private void addloopweblinks(SPSite siteCollection, SPItemEventProperties properties)
{
// Enumerate through each site and apply branding.
foreach (SPWeb web in siteCollection.AllWebs)
{
AddQuickLaunchItem(properties.ListItem["Title"].ToString(), properties.ListItem["URL"].ToString(), web);
}
}
и указанный выше метод вызывается в itemadded и ItemUpdated;), передавая значения следующим образом:
public override void ItemAdded(SPItemEventProperties properties)
{
using (SPSite siteCollection = new SPSite(properties.WebUrl))
{
if (siteCollection != null)
{
addloopweblinks(siteCollection, properties);
}
}
}
аналогичные вещи можно сделать для удаления;)
SPNavigationNode nodeHeader =
quickLaunch.Cast (). Где (n => заголовок n.Title ==) .FirstOrDefault ();
, который получит узел!
nodeHeader.delete ();
nodeHeader.update ();
это удалит элемент!
так что в вашем случае, что вам нужно, я не знаю, заметили ли вы, что это была эта часть:
web.AllowUnsafeUpdates = true;
nodeHeader = quickLaunch.Cast<SPNavigationNode>().Where(n => n.Title == header).First() ;
nodeHeader.Url = url;
web.AllowUnsafeUpdates = false;
nodeHeader.Update();
web.Update();
как вы понимаете, что я подразумеваю под подсказкой! nodeHeader.Update (); не обновил URL-адрес, при отладке он меняется, но когда я перехожу к части обновления, она не работает :( и она щелкнула, мне нужно web.AllowUnsafeUpdates = true;
loool только потому, что я сталкивался с подобной ситуацией раньше!
для вас это будет:
using(SPSite topNavigationSite = new SPSite("http://moss"))
{
using(SPWeb topNavigationWeb = topNavigationSite.OpenWeb())
{
web.AllowUnsafeUpdates = true;
SPNavigationNodeCollection topNavigationBarNodes =topNavigationWeb.Navigation.TopNavigationBar;
SPNavigationNode updateNode = topNavigationBarNodes.Navigation.GetNodeByUrl("/about");
updateNode.Url = "";
updateNode.Update();
web.Update();
web.AllowUnsafeUpdates = false;
}
}
Если пользователь не обладает достаточными правами, чем вам нужно инкапсулировать вышеупомянутое с runwithelevatedprivalages :), надеюсь, это поможет:)