Jag har ett mycket skumt problem, jag skapar upp ett par stycken javascriptcs arrayer i code-behind vid page_load och registrear dom sedan med Page.ClientScript.RegisterClientScriptBlock. Jag använder sedan arrayerna för att populera olika kontroller. Löste det hela genom att istället för att göra globala arrayer av det lägga dom i en funktion som returerar den array som innehåller de andra arrayerna.Innehållet i JavaScript arrayer försvinner
Jag har en sida som innehåller flera olika usercontrols, det är i en av dessa usercontrols som jag populerar kontrollerna med data från javascriptet. Vid första laddningen av sidan så fungerar allt helt perfekt, men så fort de sker en postback i usercontrolen så försvinner datat i javascripts arrayen. Jag kommer åt arrayen med den är tom. Vad beror detta på?
Kan det ha något att göra med att vid använding av Page.ClientScript.RegisterClientScriptBlock så måste en full postback göras? Eftersom att varje usercontrol består av en updatepanel som innehåller de kontroller som populeras samt genererar postbacks inom updatepaneln. Det som förbryllar mest är egentligen att när datat har "försvunnit" och jag tittar i käll-filen så ligger arryerna där snyggt och prydligt. Jag provade också att i min javascripts-generering-funktion lägga in en funktion som bara visade upp en alert och den går alldeles utmärkt att anropa både före och efter en postback.
Så här ser funktionen som bygger javascriptet ut, vi använder ett genereringsverktyg som heter WMBof så det är därifrån jag får mina List<T> så det kan ni ignorera.
private void BuildJavaScript()
{
string roles = TestMethodRoleNames.TestParameters + "." + TestParameterRoleNames.Parameter + "." + ParameterRoleNames.TestParameterUoMs + "." + ParameterUoMRoleNames.UnitOfMeasure + ";";
List<TestMethodFullContract> lstTestMethodFull = _testMethodFacade.TestMethodGetAll(roles);
//JavaScriptet börjar byggas här
StringBuilder javascript = new StringBuilder();
javascript.Append("var TestMethodArray = new Array();");
javascript.Append("var ParameterTmpArray = new Array();");
javascript.Append("var UoMTmpArray = new Array();");
int arrayCounter = 0;
int uomCounter = 0;
int parameterCounter = 0;
foreach (TestMethodFullContract TestMethodFull in lstTestMethodFull)
{
foreach (TestParameterFullContract TestParameter in TestMethodFull.TestParameters)
{
foreach (ParameterUoMFullContract ParameterUoM in TestParameter.Parameter.TestParameterUoMs)
{
javascript.Append("UoMTmpArray[" + uomCounter.ToString() + "] = new Array('" + ParameterUoM.UnitOfMeasure.ID + "', '" + ParameterUoM.UnitOfMeasure.Name + "');");
uomCounter++;
}
javascript.Append("ParameterTmpArray[" + parameterCounter.ToString() + "] = new Array('" + TestParameter.Parameter.ID + "','" + TestParameter.Parameter.Name + "', UoMTmpArray);");
parameterCounter++;
javascript.Append("UoMTmpArray = new Array();");
}
javascript.Append("TestMethodArray[" + arrayCounter.ToString() + "] = new Array('" + TestMethodFull.ID + "','" + TestMethodFull.Name.Replace("'", "") + "', ParameterTmpArray);");
javascript.Append("ParameterTmpArray = new Array();");
arrayCounter++;
uomCounter = 0;
parameterCounter = 0;
}
javascript.Append("function viewAlert(){alert(TestMethodArray[0]);}");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "TestMethods", javascript.ToString(), true);
}
Någon som har förslag på vad som jag kan göra eller inte göra osv?
Sv: Innehållet i JavaScript arrayer försvinner
Lade alltså till:
//Detta högst upp innan deklarationen av arrayerna
javascript.Append("function getArray() {");
//Detta sista innan scriptet registreras
javascript.Append("return TestMethodArray; }");