webForumDet fria alternativet

Skicka ArrayList från en uc till en annan via property?

.NET

1 svar · 251 visningar · startad av CokeLight

Medlem sedan juni 2000504 inlägg
Frågan#1

Hallå.. :)

Jag har en user control, uc1, som ska "skicka" en ArrayList till uc2, och sen göra en response.redirect (för att se hur det blev) och loopa ut innehållet i en Label (bara för att testa) men jag tror att den tappar innehållet redan innan redirecten sker (eller?). Den första delen utav koden anropas vid en knapptryckning:

ns1.ns2.myClass objClass = new myClass();
objClass.ColumnValues = columnValues;
Response.Redirect("default.aspx?param=uc2");

... default.aspx laddar sedan den uc som är definierad av param querystringen, o sen så vill jag då lista innehållet i uc2 på följande sätt:

private void Page_Load(object sender, System.EventArgs e)
{
   if(this.ColumnValues != null)
   {
      for(int i = 0; i < this.ColumnValues.Count; i++)
      {
	this.lblTemp.Text += "<br>" + this.ColumnValues[i];
      }
   }
}

public ArrayList ColumnValues
{
   get{return columnValues;}
   set{columnValues = value;}
}

inga oklarheter, eller..? :) iaf, sen är problemet att lblTemp.Text förblir tom.. nån som har nåt förslag hur jag kan göra...?

(ps. provade först att skicka hela ArrayList via QueryString, men hade lite problem att läsa ut värdet.. körde en split på querystringen o körde med "," som ArrayList har som standard separator (?) men det gick inte när jag gjorde iaf).

Medlem sedan juni 2000504 inlägg
#2

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 :)

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)