Jag bloggar numera på http://blog.dileno.com ».

Prenumerera på RSS

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.

Till sidhuvudet

Clicky Web Analytics