Définition par programme de la valeur HtmlDesignAssociated
-
28-09-2020 - |
Question
Je déploie une apparence composée à partir du serveur (y compris les fichiers .spcolor, .spfont, master.html et master.preview), mais je n'arrive pas à sélectionner le champ Fichier associé.J'ai essayé de le définir uniquement dans le elements.xml
fichier ainsi que le fichier du récepteur d'événements FeatureActivated
événement.
Éléments.xml :
<File Path="Master\corporate.html" Url="corporate.html" Type="GhostableInLibrary" ReplaceContent="True">
<Property Name="ContentType" Value="Html Master Page"></Property>
<Property Name="UIVersion" Value="15"></Property>
<Property Name="HtmlDesignAssociated" Value="TRUE"></Property>
<Property Name="FSObjType" Value="0"></Property>
</File>
Et le code-behind :
SPList masterGallery = web.Lists.TryGetList("Master Page Gallery");
SPListItemCollection masterItems = masterGallery.Items;
for (int m = 0; m < masterItems.Count; m++)
{
SPListItem page = masterItems[m];
if(page["Name"].ToString() == "corporate.html")
{
page["HtmlDesignAssociated"] = true;
page.Update(); // forgot to include this line
}
}
Note:J'ai omis d'autres codes non pertinents.
La solution
Ok, apparemment, j'essaie de définir le terrain HtmlDesignAssociated
du elements.xml
Le fichier dans un module ne fonctionnera pas.
Une fois que je l'ai retiré, le code du récepteur d'événement a fonctionné et mon master.html
le fichier a maintenant un associé master.master
.
J'ai un peu modifié le code pour l'utiliser SPUrlUtility.CombineUrl
au lieu de web.GetList
ou web.Lists.TryGetList("whatever")
.Voici le code qui fonctionne :
var masterGallery = SPUrlUtility.CombineUrl(relativePath, "_catalogs/masterpage");
SPList master = web.GetList(masterGallery);
SPListItemCollection masterItems = master.Items;
for (int m = 0; m < masterItems.Count; m++)
{
SPListItem page = masterItems[m];
if (page["Name"].ToString() == "corporate.html")
{
page["HtmlDesignAssociated"] = true;
page.Update();
}
}