Tasto Refresh del Browse = Aggiornamento

di il
1 risposte

Tasto Refresh del Browse = Aggiornamento

Ciao a tutti.

Ho una pagina contenente un iframe.
Dalla pagina all'interno dell'iframe devo aggiornare la pagina che lo contiene, praticamente devo fare in modo come se l'utente avesse premuto il tasto Refresh del browse. tutto questo lo devo fare alla fine di un elaborazione che avviene sotto la pressione di un tasto "Salva", quindi sono dentro una classe.
Potreste darmi una mano voi...? ho provato a scatenare l'evento load della pagina principale ma nulla, il refresh in questo modo non me lo fa!

Grazie...

1 Risposte

  • Re: Tasto Refresh del Browse = Aggiornamento

    Se non ho capito male, hai una pagina ASP caricata in un iframe, nella quale alla fine è presente un tasto Salva. Alla pressione del tasto salva, si verifica un post della pagina che fa delle elaborazioni lato Server e ti riporta la pagina contenute nell'iframe aggiornata, modificando anche il parent.

    Non puoi agire direttamente lato server in quanto deve essere il client a richiedere la pagina parent da caricare. Il mio consiglio è quello di effettuare un render dal lato server di uno script java che, una volta caraicato dal client, richiede la frame padre al server.

    Supponiamo di inserire una variabile nella Request chiamata "azione" e di assegnare come valore salva per identificare che la pagina che si sta caricando sta per essere salvata.

    <b>Fai una nuova soluzione Applicazione WEB c# in VisualStudio
    poi nella form chiamata WebForm1 inserisci nel code behind "WebForm1.cs" quanto segue (sostituisci tutto a quello che trovi)</b>

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    namespace WebApplication1
    {

    /// <summary>
    /// Descrizione di riepilogo per WebForm1.
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected int color;

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (Request["Color"]!=null)
    {
    if (Request["Color"]!="")
    {
    color=int.Parse(Request["Color"]);
    }
    else
    {
    color=0;
    }
    }
    else
    {
    color=0;
    }
    }

    #region Codice generato da Progettazione Web Form
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: questa chiamata è richiesta da Progettazione Web Form ASP.NET.
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// Metodo necessario per il supporto della finestra di progettazione. Non modificare
    /// il contenuto del metodo con l'editor di codice.
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion

    public void WriteFrame()
    {
    Response.Write("<iframe src=\"InternalPage.aspx?Azione=Aggiorna&Color="+color+"\" style=\"WIDTH: 533px; HEIGHT: 419px\">");
    }

    public void WriteColor()
    {
    switch(color)
    {
    case 0:
    Response.Write("Yellow");
    break;
    case 1:
    Response.Write("Red");
    break;
    case 2:
    Response.Write("Salmon");
    break;
    case 3:
    Response.Write("Tomato");
    break;
    }
    }
    }
    }



    <b>Ora metti nel file ASPX(HTML) WebForm1.aspx quanto segue:</b>

    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    &nbsp;
    <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; WIDTH: 568px; POSITION: absolute; TOP: 8px; HEIGHT: 448px"
    cellSpacing="1" cellPadding="1" width="568" bgColor="<%WriteColor(); %>" border="1">
    <TR>
    <TD style="WIDTH: 92px; HEIGHT: 52px"></TD>
    <TD style="HEIGHT: 52px"></TD>
    </TR>
    <TR>
    <TD style="WIDTH: 92px"></TD>
    <TD><%WriteFrame();%></IFRAME></TD>
    </TR>
    </TABLE>
    </form>
    </body>
    </HTML>

    <b>Ora fai una nuova form e chiamala InternalPage e sostituisci al cs quanto segue:</b>

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    namespace WebApplication1
    {
    /// <summary>
    /// Descrizione di riepilogo per InternalPage.
    /// </summary>
    public class InternalPage : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.DropDownList DropDownList1;
    protected bool Save;
    protected int color;

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (Request["Azione"]=="Salva")
    {
    Response.Write("<script> parent.location='WebForm1.aspx?Color="+Request["Color"]+"'; </script>");
    }
    }

    #region Codice generato da Progettazione Web Form
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: questa chiamata è richiesta da Progettazione Web Form ASP.NET.
    //
    InitializeComponent();
    base.OnInit(e);
    DropDownList1.Items.Add("Yellow");
    DropDownList1.Items.Add("Red");
    DropDownList1.Items.Add("Salmon");
    DropDownList1.Items.Add("Tomato");
    if (Request["Color"]!=null)
    {
    color=int.Parse(Request["Color"]);
    }
    else
    {
    color=0;
    }
    DropDownList1.SelectedIndex=color;
    }

    /// <summary>
    /// Metodo necessario per il supporto della finestra di progettazione. Non modificare
    /// il contenuto del metodo con l'editor di codice.
    /// </summary>
    private void InitializeComponent()
    {
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion

    private void Button1_Click(object sender, System.EventArgs e)
    {
    Response.Redirect("InternalPage.aspx?Azione=Salva&Color="+DropDownList1.SelectedIndex);
    }
    }
    }

    Nel'aspx (HTML) metti:

    <%@ Page language="c#" Codebehind="InternalPage.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.InternalPage" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>InternalPage</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:DropDownList id="DropDownList1" style="Z-INDEX: 101; LEFT: 40px; POSITION: absolute; TOP: 32px"
    runat="server" Width="208px" ForeColor="Black"></asp:DropDownList>
    <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 96px; POSITION: absolute; TOP: 80px" runat="server"
    Width="96px" Text="Salva"></asp:Button>
    </form>
    </body>
    </HTML>



    Esegui la soluzione, dovresti vedere una form principale con una tabella e una iframe al centro.

    Cambiando il valore della dropdown e premendo il pulsante Salva, si generano a catena una serie di post (ti consiglio di mettere un po' di break point per capire quello che succede) che ti permettono di fare il refresh della frame principale. Per rendere palese il refresh ho fatto cambiare il colore della frame principale ad ogni post.
    Fai attenzione, non sto cambiando il colore tramite un comando javascript che imposta l'attributo, ma sto renderizzando tutta la frame principale da zero (effetto uguale ma modalità differente)

    Ciao, Andrea

    mailto:
Devi accedere o registrarti per scrivere nel forum
1 risposte