Pregunta

Estoy tratando de hacer un cambio de nombre de la página a granel (NB. El nombre del archivo, por ejemplo Default.aspx, no el título mostrado)

foreach (PublishingPage page in pweb.GetPublishingPages())
{
    Console.WriteLine(page.Name);
    page.Name = GetNewNamingConventionForPage(page.Name); //error, it's read only
}

¿Qué ocurre? Puedo cambiar el nombre de forma manual en la biblioteca de páginas.

¿Fue útil?

Solución

Debe establecer el campo de la "FileLeafRef" SPListItem subyacente de la página de publicación. Es necesario comprobar primero el archivo (o crearlo y luego Actualícela para nuevos sitios), actualice la propiedad .ListItem["FileLeafRef"] y compruebe de nuevo y publicarla.

Este código es crear una nueva página de publicación y luego cambiar el nombre del archivo. Usted tiene que ejecutar el .Update en el PublishingPage antes de ajustar el FileLeafRef de lo contrario se produce un error "object does not exist".

if (PublishingWeb.IsPublishingWeb(curWeb))
{
    PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(curWeb);
    PublishingPage pubPage = pubWeb.AddPublishingPage();

    pubPage.Title = "My New Page Title";
    pubPage.Update();

    pubPage.ListItem["FileLeafRef"] = "default";  //.aspx is added automatically
    pubPage.ListItem.SystemUpdate();  //SystemUpdate doesn't update the modified fields
    pubPage.CheckIn("");
    pubPage.ListItem.File.Publish("");
} 

Actualizar . BaseName cambió a FileLeafRef, BaseName es de sólo lectura y no se puede actualizar este campo

Otros consejos

Su Beacuse PublishingPage.Name es una propiedad de sólo lectura.

Usted podría intentar:

page.ListItem("Name")

No he probado esto así que no sé si esto va a hacer exactamente lo que necesita, pero que sin duda no se puede establecer utilizando la propiedad Name.

var url = oldUrl.Replace(oldFileName, newFileName);
publPage.ListItem.File.MoveTo(url);
Licenciado bajo: CC-BY-SA con atribución
scroll top