Jag gissar att jag inte fick något svar tidigare för att frågan kanske var diffust ställd och tänkte att jag skulle lägga till lite mer kod och omformulera frågan så att den blir mer öppen :)
Huvudfråga :
Hur skickar jag e.Item.Cells[0].Text och de andra värdena nedan till uc2 (utan att använda session) (och det behöver inte alls vara med ArrayList e.d.) ?
Det som gör mig lite förvirrad är att jag inte kan skicka querystring direkt till uc2 utan (det känns) som om man måste skicka den via default.aspx och sen vet jag inte riktigt hur uc2 som då laddas ska ta del av den informationen? Jag har möjligtvis missat nåt elementärt så alla förslag är välkomna :)
Jag har ändrat från att använda en property med get/set för att skicka variabler till att använda Context.Items såsom Pace föreslog i ett tidigare inägg, men problemet kvarstår att jag inte verkar kunna kommunicera mellan user controls, utan endast mellan user control och dess förälder aspx... :(
uc1 och uc2 ingår i default.aspx (laddas efter varandra).
Nedanstående kod finns i uc1 som skickar ArrayList till uc2
protected void myDg_Command(object sender, DataGridCommandEventArgs e)
{
switch( ( (Button)e.CommandSource ).CommandName )
{
case "doCopy":
ArrayList columnValues = new ArrayList();
columnValues.Add(e.Item.Cells[0].Text);
columnValues.Add(e.Item.Cells[1].Text);
columnValues.Add(e.Item.Cells[2].Text);
columnValues.Add(e.Item.Cells[3].Text);
columnValues.Add(e.Item.Cells[4].Text);
//ns1.ns2.myClass objClass = new myClass();
//objClass.ColumnValues = columnValues;
Context.Items["columnValues"] = columnValues;
//Response.Redirect("default.aspx?param=uc2&menu=ucMenuNoPost");
//server transfer, as opposed to redirect, ensures that context is not lost betw. postbacks.
Server.Transfer("default.aspx?param=uc2&menu=ucMenuNoPost");
break;
//other commands...
default:
break;
}
}
uc2 har jag helt enkelt ändrat till att sätta columnValues till det värde Context.Items hade:
private void Page_Load(object sender, System.EventArgs e)
{
ArrayList columnValues = (ArrayList)Context.Items["columnValues"];
if(columnValues != null)
{
for(int i = 0; i < columnValues.Count; i++)
{
this.lblTemp.Text += "<br>" + columnValues[i];
}
}
}
(p.s. nån som dessutom vet om ViewState fungerar då mer än en uc är inblandad, eller fungerar det mest när man postar mellan en sida? å andra sidan så blir ju resultatet en html sida och viewstaten är ju inbäddad i html-outputen om man säger så?)
(Det gick att lösa med Session på två sekunder men om det skulle gällt större system så blir det ju dåligt för servern om det är för mycket session så jag skulle vilja lära mig hur man kan använda alternativa metoder... fast annars är det ju iofs ingen panik :)