Har problem med att skicka värden mellan IFRAME. Hur hanterazr du den bakomliggande datat? I IFRAM1 så trycker jag på knappen Det du försöker göra är omöjligt, man kan inte använda response.redirect på det viset. Ni har inga exempel på kod som kan fungera, kommer inte på vad jag skall göra. Jag måste hålla med föregående talare till viss del.Skicka värden mellan IFRAME
Jag har två iFrame som ligger på en sida master.aspx.
Jag vill skicka värden från iframe1 som hämtar info i en db till iframe2 som skall presentera det.
Problemet är att iframe2 öppnas upp som ett eget fönster istället för att visa informationen i master.aspx som har iframe2.Sv: Skicka värden mellan IFRAME
Hur hämtar du upp informationen?
Skriver du i CodeBehind?
Är dina databärare public?
Mao: Mer information tack.
//Mikael.NETSv: Skicka värden mellan IFRAME
<code>
private void DynamicBtnClicked(object sender, System.Web.UI.ImageClickEventArgs e)
{
outpput.Text = ((ImageButton)sender).ID;
HttpContext.Current.Response.Redirect("iframe2.aspx?tagId="+((ImageButton)sender).ID);
}
</code>
IFRAME 2 tar emot
<code>
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
string tagId=(Request.QueryString.Get("tagId"));
if(tagId!=null)
{
taginfo(tagId);
}
}
}
</code>
taginfo är en funktion som hämtar värden från en db
informationen skall sedan skrivas ut i IFRAME2 som ligger på master.aspx, där även IFRAME1 ligger.
Har provat med olika TARGET="" Sv: Skicka värden mellan IFRAME
Förslag:
Använd javascript istället för response.redirect. Alternativt: Om du redan innan återpostningen vet var du skall så kan du sätta target på formuläret eller liknandeSv: Skicka värden mellan IFRAME
Sv: Skicka värden mellan IFRAME
Till att börja med så vill jag för alla läsare en gång för alla att man i nuläget inte kan sätta target på en respone.redirect. Det går inte. Så enkelt är det. Det finns workarunds men du kan inte skriva:
<code>
response.redirect ("minurl.aspx target=mainframe")
</code>
Ok, till problemet
Om jag har fattat det hela rätt så har du en sida innehållandes två stycken Iframes. I den ena finns en rad knappar och då du tycker på en knapp i den ena så ska en viss information laddas upp i den andra, vars page_load du publicerat.
(I parantes sagt så har du lagt ut en av de bästa koddumparna jag sett på riktigt länge)
Problemet blir ju nu följande: du kan inte sätta target på det sätt som vore enklast (se längt upp) och du vill kunna skapa knapparna dynamiskt.
Analysen av det hela ger mig i alla fall följade lilla teoridel. Längst bak i en av mina många böcker som jag läst om asp.net (skryta skryta) så finns en artikel som handlar om hur man ska optimera sin lösningar. Den pratar t ex om vikten av att inte göra postbacks om det inte behövs och heller inte använda serverkontroller om det heller inte verkligen behövs. Artikeln blev fröet till min lösning: Skapa inte serverkontroller dynamiskt.
Lösningen blev kanske lite krånglig men här är den i alla fall.
Jag skapade en sida som heter master.aspx. Den innehåller bara två stycken IFrames som heter frame1 respektive frame2. Src för frame1 är en sidan som heter frame1.aspx.
Sedan skapade jag en sida som heter frame1.aspx och i dess codedbehind skrev jag följande (OBS VB-kod):
<code>
Dim i As Integer
For i = 1 To 10
Dim htmlBtn As New System.Web.UI.HtmlControls.HtmlButton()
htmlBtn.ID = i.ToString
htmlBtn.Attributes.Add("onclick", "javascript:Onclick=LoadFrame2(this.id)")
Me.Controls.Add(htmlBtn)
Next
</code>
Notera noga att laouyt och liknande inte har tagits hänsyn till. Om du vill kan du ju skapa en tabelle eller liknande för att ha kolla på saken. Om du vill ha images så får du tänka till lite till men det är integ så svårt.
I aspx-koden för samma sida skapade jag följade lilla script med placering i head:
<code>
function LoadFrame2(tagID) {
parent.document.frames[1].document.location="frame2.aspx?tagId="+tagID;
}
</code>
Koden säger att då funktionen anropas (det sker ju i knappen) så ska "min" förälders (jag vet att det är sidan master.aspx) andra frame (frame2) gå till location frame2.aspx och så läggs en tagID på dynamiskt.
I code behind för frame2.aspx så kommer följande vb-kod att göra susen:
<code>
If Not Page.IsPostBack Then
Dim tagID As String = Request.QueryString.Get("tagID")
If Not tagID Is Nothing Then
MyDataGettingFunction(tagID)
End If
End I
</code>
Jag hoppas att detta var svaret du ville ha och att jag förklarat mig nog.
Feedback kan du annars sända till min iMail så rättar jag till det hela.
//Mikael.NET