Uppdatera dina språkfiler för att undvika FormatException när du försöker radera en sida i EPiServer
Om du försöker radera en sida i EPiServers redaktörsläge och får ett System.FormatException-felmeddelande så beror det ofta på att du inte har uppdaterade språkfiler på din webbplats.
Det du ska göra är att helt enkelt uppdatera dina språkfiler som ligger i lang-mappen, till de senaste för EPiServer-installationen.
Så här ser felmeddelandet ut:
System.FormatException: Index (zero based) must be greater than or equal to zero
and less than the size of the argument list.
Och stacken ser ut så här:
[FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.]
System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args) +7483117
System.String.Format(IFormatProvider provider, String format, Object[] args) +107
EPiServer.UI.Edit.DeletePage.CreateReferenceList(PageReferenceCollection deleteData) +318
EPiServer.UI.Edit.DeletePage.OnLoad(EventArgs e) +609
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
Det som sker är att du försöker radera en sida som har beroenden knutna till sig. I stället för felmeddelandet ska EPiServer visa ett meddelande och ge dig två val - att radera sidan eller avbryta raderingen. Det är här det blir fel, om man inte har uppdaterade språkfiler.
Om man tittar på metoden DeletePage.CreateReferenceList() i Reflector (finns i stacken ovan) så ser man att metoden skickar tillbaka en översatt sträng och en länk:
if (string.Compare(strA, string.Empty) == 0)
{
strA = base.Translate("#reftypeshortcut");
}
SystemMessageContainer systemMessageContainer = base.SystemMessageContainer;
systemMessageContainer.Message = systemMessageContainer.Message + string.Format(strA + "<br>", this.RenderLink(reference));
Det är framför allt base.Translate("#reftypeshortcut") som är intressant - det är nämligen här som problemet uppstår. Tittar man på reftypeshortcut i en gammal språkfil så ser den ut så här:
<reftypeshortcut>{0} is the destination in a shortcut from {1}</reftypeshortcut>
Samma element ser ut så här i en nyare språkfil:
<reftypeshortcut>Page with ID {0} links to this page or some of its descending pages.</reftypeshortcut>
Varpå man kan dra slutsatsen att indexet 1 helt enkelt inte finns i den tidigare språkfilen, om man har uppdaterat webbplatsen, men inte språkfilerna.