cause webpage one to reload when webpage two is closed.

  • Thread starter Thread starter Paul
  • Start date Start date
P

Paul

Hi I tried a google search but could not find anything. I am trying to cause
one webpage to reload when a second web page is closed. The second webpage
loads data into a session variable and when closed I need to reload the first
page loading in the data from the session variable. Since I need to close
the sescond form just setting the post back url to the first page on the
close button from the second page is not quite what I am looking for.
 
Hi I tried a google search but could not find anything.  I am trying to cause
one webpage to reload when a second web page is closed.  The second webpage
loads data into a session variable and when closed I need to reload the first
page loading in the data from the session variable.  Since I need to close
the sescond form just setting the post back url to the first page on the
close button from the second page is not quite what I am looking for.

Hi Paul,

Try to add the following code to your second web page

<body onunload="opener.location.href=opener.location.href;">

You might be also interested to see the following thread
http://forums.asp.net/t/988319.aspx

Hope this helps
 
Hi, thanks for the response.
I tried adding
<body onunload="opener.location.href=opener.location.href;"></body>
to the source of the second page but get the error
element body can not be nested within element td. I placed the code as
follows in the second form aspx file.

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">

<body onunload="opener.location.href=opener.location.href;"></body>


followed by several html tables.
Anyhow just wondering where to place the body tag?

Also the way the user gets to the second page from the first page is just a
hyperlink.
thanks.
 
Hi, thanks for the response.
I tried adding
<body onunload="opener.location.href=opener.location.href;"></body>
to the source of the second page but get the error
element body can not be nested within element td.  I placed the code as
follows in the second form aspx file.

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">

  <body onunload="opener.location.href=opener.location.href;"></body>

followed by several html tables.
Anyhow just wondering where to place the body tag?

Also the way the user gets to the second page from the first page is just a
hyperlink.
thanks.

--
Paul G
Software engineer.










- Show quoted text -

The BODY element contains all the content of a document, including TD
and TABLE. It can be nested within HTML element only. It seems that
you are using Master page and it means you should change a BODY
element of the Master page. If Master page is used for many Content
pages then you can either make a copy of it (to apply changes to the
BODY tag), or you can set your Master page body tag to:

<body id="mBody" runat="server">

Then add this on the page that has to be closed:

public void Page_Load(Object sender, EventArgs e)
{
HtmlGenericControl body =
(HtmlGenericControl)Master.FindControl("mBody");
body.Attributes.Add("onunload",
"opener.location.href=opener.location.href;");
}

I didn't test it, but I think it should work.
 
Hi, I was able to add the body tag, since I am using a master page I had to
create an id for the tag in the master page and set a public property, so
thinking I can now run a script possibly to reload the first window.
 
Hi, It works! I guess it must know what the parent window is to be able to
reload it.
Thanks!
 
Hi just had one last question. Not sure if there is anything that can be
done about this but when webpage 2 reloads (I have some controls that
postback) It also causes webpage 1 to reload. Is there anyway to have page
one reload only when page two is closed? I guess the onunload event must
occure when page 2 postsback to the server? Thanks.
HtmlGenericControl body =

(HtmlGenericControl)Master.FindControl("MasterPageBodyTag");
body.Attributes.Add("onunload",
"opener.location.href=opener.location.href;");
 
Hi just had one last question.  Not sure if there is anything that can be
done about this but when webpage 2 reloads (I have some controls that
postback) It also causes webpage 1 to reload.  Is there anyway to have page
one reload only when page two is closed?  I guess the onunload event must
occure when page 2 postsback to the server? Thanks.
HtmlGenericControl body =

(HtmlGenericControl)Master.FindControl("MasterPageBodyTag");
                   body.Attributes.Add("onunload",
                  "opener.location.href=opener.location.href;");
--
Paul G
Software engineer.






- Show quoted text -

Hi Paul

The onUnload event is handled when you refresh the page as well.
So, to make your code triggered on close only you can try following:

1) add the following js-code to your Master page between <head> and </
head>

<script>
function doUnload()
{
if (window.event.clientX < 0 && window.event.clientY < 0)
{
opener.location.href=opener.location.href;
}
}
</script>

2) change code-behind, from

body.Attributes.Add("onunload",
"opener.location.href=opener.location.href;");

to

body.Attributes.Add("onunload", "doUnload();");

That should avoid the refresh of the parent window if child window has
been refreshed.
I hope it works

Cheers!

Alexey Smirnov [MVP]
 
Hi, thanks for the additional response. I tried the following but now it
appears that the first page is not reloading now but even when I close the
second page. To close the second page I am using an input button with the
following
<input id="btn_close" type="button" value="Close" onclick ="window.close()"
style="width: 100px" class="Button_sm" />.

Here is the code I added as specified, in the master page I added between
the head tags.
<script type="text/javascript">
function doUnload()
{
if (window.event.clientX < 0 && window.event.clientY < 0)
{
opener.location.href=opener.location.href;
}
}
</script>

In the code behind on the second webform (the one that when closed should
cause the first page to refresh)

HtmlGenericControl body =

(HtmlGenericControl)Master.FindControl("MasterPageBodyTag");
body.Attributes.Add("onunload", "doUnload();");
thanks.
 
Hi, thanks for the additional response.  I tried the following but now it
appears that the first page is not reloading now but even when I close the
second page.  To close the second page I am using an input button with the
following
<input id="btn_close" type="button" value="Close" onclick ="window.close()"
style="width: 100px" class="Button_sm" />.

Here is the code I added as specified, in the master page I added between
the head tags.
 <script  type="text/javascript">
function doUnload()
{
 if (window.event.clientX < 0 && window.event.clientY < 0)
 {
   opener.location.href=opener.location.href;
 }}

</script>

In the code behind on the second webform (the one that when closed should
cause the first page to refresh)

 HtmlGenericControl body =

(HtmlGenericControl)Master.FindControl("MasterPageBodyTag");
                             body.Attributes.Add("onunload", "doUnload();");  
thanks.

Paul, if you programmatically close the page by onclick
="window.close()" then it would be much easier to add the refresh call
directly to the onclick call. Try it

onclick="javascript:opener.location.href=opener.location.href;window.close();"
 
Hi Alexey,thanks for the additional information, that seemed to do the trick.
I probably should have mentioned I was closing form 2 programatically. Have
another minor issue, on webform one I am reading reading a session variable
which works now. The session variable is a generic list with a simple
structure as a datatype. The problem is on webform one when I try to display
it in a gridview control I get the error (datasource for gridview does not
have any properties or attributes from which to generate columns). For the
code I have

genericlist = (List<structRepo>)Session["genericlist"];
if (genericlist != null)
{
gridview.DataSource = genericlist;//
gvRepository.DataBind();
}
I also have the genericlist declared as public.
 
Hi Alexey,thanks for the additional information, that seemed to do the trick.
 I probably should have mentioned I was closing form 2 programatically. Have
another minor issue, on webform one I am reading reading a session variable
which works now.  The session variable is a generic list with a simple
structure as a datatype.  The problem is on webform one when I try to display
it in a gridview control I get the error (datasource for gridview does not
have any properties or attributes from which to generate columns).  Forthe
code I have

 genericlist = (List<structRepo>)Session["genericlist"];
                if (genericlist != null)
                {
                    gridview.DataSource = genericlist;//                    
        gvRepository.DataBind();
                }
I also have the genericlist declared as public.


Hi Paul,

if using a GridView with AutoGenerateColumns="True" the data source
expected to get properties to generate the columns of the grid. You
can either, use a GridView with BoundColumns specified for required
columns

<asp:GridView AutoGenerateColumns="false"...
<Columns>
<asp:BoundField DataField="..."

or you should update the structRepo class to return properties for
each field

e.g.

private int _list_id;

public int list_id {
get {
return _list_id
}
set {
_list_id = value
}
}

Please take a look at the following link (the definition for the
public class Person)
http://unboxedsolutions.com/sean/archive/2005/01/22/428.aspx

Hope it helps
 
Hi Alexey, thanks for the additional information. I tried setting the
AutoGenerateColumns="False" and then adding bound columns and setting the
datasource name to the same as the names of the items in the structure, but
that did not seem to work as it could not find the name. I will try setting
up properties and setting the autogencolumns to true.

Paul G
Software engineer.


Alexey Smirnov said:
Hi Alexey,thanks for the additional information, that seemed to do the trick.
I probably should have mentioned I was closing form 2 programatically. Have
another minor issue, on webform one I am reading reading a session variable
which works now. The session variable is a generic list with a simple
structure as a datatype. The problem is on webform one when I try to display
it in a gridview control I get the error (datasource for gridview does not
have any properties or attributes from which to generate columns). For the
code I have

genericlist = (List<structRepo>)Session["genericlist"];
if (genericlist != null)
{
gridview.DataSource = genericlist;//
gvRepository.DataBind();
}
I also have the genericlist declared as public.


Hi Paul,

if using a GridView with AutoGenerateColumns="True" the data source
expected to get properties to generate the columns of the grid. You
can either, use a GridView with BoundColumns specified for required
columns

<asp:GridView AutoGenerateColumns="false"...
<Columns>
<asp:BoundField DataField="..."

or you should update the structRepo class to return properties for
each field

e.g.

private int _list_id;

public int list_id {
get {
return _list_id
}
set {
_list_id = value
}
}

Please take a look at the following link (the definition for the
public class Person)
http://unboxedsolutions.com/sean/archive/2005/01/22/428.aspx

Hope it helps
 
Hi Alexey, thanks for the additional information.  I tried setting the
AutoGenerateColumns="False" and then adding bound columns and setting the
datasource name to the same as the names of the items in the structure, but
that did not seem to work as it could not find the name.  I will try setting
up properties and setting the autogencolumns to true.

Paul G
Software engineer.



Alexey Smirnov said:
Hi Alexey,thanks for the additional information, that seemed to do the trick.
 I probably should have mentioned I was closing form 2 programatically.  Have
another minor issue, on webform one I am reading reading a session variable
which works now.  The session variable is a generic list with a simple
structure as a datatype.  The problem is on webform one when I try to display
it in a gridview control I get the error (datasource for gridview does not
have any properties or attributes from which to generate columns).  For the
code I have
 genericlist = (List<structRepo>)Session["genericlist"];
                if (genericlist != null)
                {
                    gridview.DataSource = genericlist;//                    
        gvRepository.DataBind();
                }
I also have the genericlist declared as public.
if using a GridView with AutoGenerateColumns="True" the data source
expected to get properties to generate the columns of the grid. You
can either, use a GridView with BoundColumns specified for required
columns
<asp:GridView AutoGenerateColumns="false"...
<Columns>
<asp:BoundField DataField="..."
or you should update the structRepo class to return properties for
each field

private int _list_id;
public int list_id {
  get {
    return _list_id
  }
  set {
    _list_id = value
  }
}
Please take a look at the following link (the definition for the
public class Person)
http://unboxedsolutions.com/sean/archive/2005/01/22/428.aspx
Hope it helps- Hide quoted text -

- Show quoted text -

ah, true, I think you're right and at first you have to set properties
to bind the grid
 
Back
Top