When a user clicks on a linkbutton on a page, i would like to render a printer-friendly version of the asp.net page and download it as an html attachment to the browser. The code below works great, with a few exceptions:
1) IE displays the FIle Download dialog box twice. (You have to click the Open button twice)
2) the encoding of the page is set to Western European (Windows) versus UTF-8.
#1 above is just a pain.
#2 above results in some wingding fonts to be displayed incorrectly in the page.
Anyone have suggestions on how to fix these problems or see any problems in the code? #2 is our highest priority.
CODE:
// this code is implemented in the Render method of the page
// when a user click the button, it sets renderAsAttache ment = true, and adds the desired controls to be rendered
// to the propControlCont ainer Controls collection
protected override void Render(HtmlText Writer writer)
{
if (renderAsAttach ement)
{
Response.Clear( );
Response.Conten tEncoding = Encoding.UTF8;
Response.Charse t = "utf-8";
Response.Append Header("Content-Disposition", String.Format(" attachment;File name=\"{0}\"", "Document1.htm" ));
Response.Conten tType = "text/html";
writer.WriteFul lBeginTag("html ");
writer.WriteLin e();
writer.WriteFul lBeginTag("head ");
writer.WriteLin e();
writer.Write(Gl obals.ColorSche me); // this renders a style sheet that is used by the page
writer.WriteLin e();
writer.WriteEnd Tag("head");
writer.WriteLin e();
writer.WriteFul lBeginTag("body style=\"padding :5pt;\"");
writer.WriteLin e();
propControlCont ainer.RenderCon trol(writer); // this is a parent control that renders all the child controls (in it's control collection)
// that are to be included in the "printer-friendly" version of the page
writer.WriteEnd Tag("body");
writer.WriteLin e();
writer.WriteEnd Tag("html");
writer.WriteLin e();
Response.End();
}
else
{
base.Render(wri ter);
}
} 7 2254
Hi Brian,
Thank you for posting in Microsoft Newsgroup. Regarding on the issue, I am
finding proper resource to assist you and we will update as soon as
posible.
Regards,
Luke
Microsoft Online Support
Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
thanks Luke!
"MSFT" <lu******@onlin e.microsoft.com > wrote in message
news:1J******** *******@cpmsftn gxa07.phx.gbl.. . Hi Brian,
Thank you for posting in Microsoft Newsgroup. Regarding on the issue, I
am finding proper resource to assist you and we will update as soon as posible.
Regards,
Luke Microsoft Online Support
Get Secure! www.microsoft.com/security (This posting is provided "AS IS", with no warranties, and confers no rights.)
Hi Brian Paul,
Thank you for using Microsoft Newsgroup service. Based on your description,
you had a aspx page to provide a certain format html document for the user
to open in browsr or download to client. The html document has some
"printer-friendly" data( are they all unicode data?). Also, you set the
page's Header as
Response.Append Header("Content-Disposition",
String.Format(" attachment;File name=\"{0}\"", "Document1.htm" )); to force
the download dialog to popup and set the charset as "UTF-8"
However, when you run the page and fire the download operation, you
encountered two problems:
1. the download dialog popup twice
2. some of the html document's data doesn't display correctly
Please correct me if my understanding or your problem is not quite accurate.
As for the above two problems I've done some tested on them. I also met the
first problem, it is a bit strange why the dialog popup twice. I'll do some
further research on it and I also find a way to workaround the problem:
Just using another page to render the document output which will be
downloaded or opened. Add the "render" method in this page.
In the original page, just use a simple hyperlink which point to document
page, such as
<a href="showdoc.a spx">open document</a>
the "showdoc.as px" is just the page which has the "render? method to
generate the "printer-friendly data and show download dialog.
Thus, the pop dialog won't popup twice.
As for the second problem. You said that " the encoding of the page is set
to Western European (Windows) versus UTF-8" and some "wingding fonts "
doesn't display correctly. Do you means that when the document is opended
in the browser, the Encoding of the browser is set as "western European"
rather than "UTF-8"? And if you change the browser's view->encoding to
"UTF-8", does those "wingding fonts " display correctly?
If it can display correctly when you set the browser's view->encoding as
"UTF-8", the problem is caused by the client browser's default encoding
setting. Since the default encoding of the client browser is set as
"western European", when you open a certain page in the browser, it will
always first display using the default setting. This feature is not set via
the serverside code.
If the "wingding fonts" still can't display correctly when you chang the
browsesr's view->encoding to "UTF-8", I think the problem is likely due to
the "wingding fonts" which can't display well in UTF-8. Thus, would you
please provide some of the "wingding fonts" which can't display well so
that I can do further research on them?
Please try out the preceding suggestion to see whether it helps. Also if
you have any questions on it, please feel free to let me know.
Steven Cheng
Microsoft Online Support
Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
Hi Steven,
Thanks very much for your time on this. I sure appreciate it your support.
You found the problem to #2. See my responses in CAPS inline below:
thanks again!!!
"MSFT" <v-******@online.m icrosoft.com> wrote in message
news:3Y******** ******@cpmsftng xa07.phx.gbl... Hi Brian Paul,
Thank you for using Microsoft Newsgroup service. Based on your
description, you had a aspx page to provide a certain format html document for the user to open in browsr or download to client. The html document has some "printer-friendly" data( are they all unicode data?). Also, you set the page's Header as Response.Append Header("Content-Disposition", String.Format(" attachment;File name=\"{0}\"", "Document1.htm" )); to force the download dialog to popup and set the charset as "UTF-8"
However, when you run the page and fire the download operation, you encountered two problems: 1. the download dialog popup twice 2. some of the html document's data doesn't display correctly
Please correct me if my understanding or your problem is not quite
accurate. As for the above two problems I've done some tested on them. I also met
the first problem, it is a bit strange why the dialog popup twice. I'll do
some further research on it and I also find a way to workaround the problem: Just using another page to render the document output which will be downloaded or opened. Add the "render" method in this page.
In the original page, just use a simple hyperlink which point to document page, such as <a href="showdoc.a spx">open document</a>
the "showdoc.as px" is just the page which has the "render? method to generate the "printer-friendly data and show download dialog. Thus, the pop dialog won't popup twice.
THANKS FOR THE SUGGESTION, HOWEVER, IT'S A LOT MORE WORK THAN MY CURRENT
IMPLEMENTATION.
HERE'S WHY:
IN MOST CASES DATAGRIDS ARE THE CONTROLS TO BE RENDERED ON EACH PAGE. THE
PAGE ALLOWS FILTERS TO BE SET FOR THE DATAGRID. YOU CAN ALSO SORT THE DATA
BY CLICKING ON THE HEADER COLUMN WITHIN EACH DATAGRID.
USING A SEPERATE PAGE REQUIRES ME TO PASS ALL THE FILTER AND SORT PARAMS TO
THE 2ND PAGE AND RE-DATABIND ALL THE GRID(S) (REQUIRING ANOTHER ROUND TRIP
TO THE DB).
USING THE SAME PAGE IS MUST SIMPLER AND EFFICIENT. I DON'T HAVE TO SEND ALL
THE PAGE PARAMS, AND I DON'T EVEN HAVE TO RE-DATABIND THE GRIDS. I JUST ADD
THE GRID TO THE RENDER FUNCTION OF THE PARENT PAGE AND THE GRID(S) ARE
RENDERED BASED ON THEIR CURRENT VIEWSTATE.
IF AT ALL POSSIBLE, I WOULD LIKE TO STAY WITH THE SINGLE PAGE
IMPLEMENTATION.
-----
AFTER MORE INITIAL TESTING I HAVE FOUND THAT SOME VERSIONS OF IE6 ON WINXP
DON'T PROMPT TWO DIALOGS. THE IE VERSIONS ARE THE SAME, BUT ONE HAS MORE
UPDATES:
THIS ONE PROMPTS TWICE:
IE VERSION ON WINXP: 6.0.2800.1106.X PSP2.030422-1633
UPDATES: SP1, Q328970, Q324929, Q810847, Q813951, Q813489, Q330994, Q818529,
Q822925, Q828750, 824145
THIS ONE PROMPTS ONCE:
IE VERSION ON WINXP: 6.0.2800.1106.X PSP2.030422-1633
UPDATES: SP1, Q810847, Q813951, Q813489, Q330994, Q818529, Q822925, Q828750,
824145
IT DOES NOT INCLUDE: Q328970, Q324929 ....SO MAYBE IT HAS SOMETHING TO DO
WITH ONE OF THESE UDPATES. As for the second problem. You said that " the encoding of the page is set to Western European (Windows) versus UTF-8" and some "wingding fonts " doesn't display correctly. Do you means that when the document is opended in the browser, the Encoding of the browser is set as "western European" rather than "UTF-8"?
YES, THAT IS CORRECT.
And if you change the browser's view->encoding to "UTF-8", does those "wingding fonts " display correctly?
YES, THAT FIXED IT!!!! ONE QUESTION THOUGH, OUT OF THE BOX, WHAT IS IE'S
DEFAULT ENCODING? I DON'T RECALL CHANGING THIS SETTING ON ANY OF OUR TEST
MACHINES.
If it can display correctly when you set the browser's view->encoding as "UTF-8", the problem is caused by the client browser's default encoding setting. Since the default encoding of the client browser is set as "western European", when you open a certain page in the browser, it will always first display using the default setting. This feature is not set
via the serverside code.
If the "wingding fonts" still can't display correctly when you chang the browsesr's view->encoding to "UTF-8", I think the problem is likely due to the "wingding fonts" which can't display well in UTF-8. Thus, would you please provide some of the "wingding fonts" which can't display well so that I can do further research on them?
Please try out the preceding suggestion to see whether it helps. Also if you have any questions on it, please feel free to let me know.
Steven Cheng Microsoft Online Support
Get Secure! www.microsoft.com/security (This posting is provided "AS IS", with no warranties, and confers no rights.)
Hi Steven,
After doing more testing with issue #2 below i've found that when the
document opens as an attachment in the new window, the encoding always
defaults to Western European (Windows) -- even after the default setting in
IE under View/Encoding is set to UTF-8. In the new window once the document
has opened, if i change the encoding to UTF-8, the Wingding font (a checkbox
symbol) is displayed correctly. However, this is a pain to require the
user's to do this each time. Is there a way to ensure the new window opens
using UTF-8?
thanks,
Brian
"Brian Paul" <br****@ekyros. com> wrote in message
news:Of******** ******@TK2MSFTN GP12.phx.gbl... Hi Steven,
Thanks very much for your time on this. I sure appreciate it your
support. You found the problem to #2. See my responses in CAPS inline below:
thanks again!!!
"MSFT" <v-******@online.m icrosoft.com> wrote in message news:3Y******** ******@cpmsftng xa07.phx.gbl... Hi Brian Paul,
Thank you for using Microsoft Newsgroup service. Based on your description, you had a aspx page to provide a certain format html document for the
user to open in browsr or download to client. The html document has some "printer-friendly" data( are they all unicode data?). Also, you set the page's Header as Response.Append Header("Content-Disposition", String.Format(" attachment;File name=\"{0}\"", "Document1.htm" )); to force the download dialog to popup and set the charset as "UTF-8"
However, when you run the page and fire the download operation, you encountered two problems: 1. the download dialog popup twice 2. some of the html document's data doesn't display correctly
Please correct me if my understanding or your problem is not quite accurate. As for the above two problems I've done some tested on them. I also met
the first problem, it is a bit strange why the dialog popup twice. I'll do some further research on it and I also find a way to workaround the problem: Just using another page to render the document output which will be downloaded or opened. Add the "render" method in this page.
In the original page, just use a simple hyperlink which point to
document page, such as <a href="showdoc.a spx">open document</a>
the "showdoc.as px" is just the page which has the "render? method to generate the "printer-friendly data and show download dialog. Thus, the pop dialog won't popup twice. THANKS FOR THE SUGGESTION, HOWEVER, IT'S A LOT MORE WORK THAN MY CURRENT IMPLEMENTATION.
HERE'S WHY:
IN MOST CASES DATAGRIDS ARE THE CONTROLS TO BE RENDERED ON EACH PAGE. THE PAGE ALLOWS FILTERS TO BE SET FOR THE DATAGRID. YOU CAN ALSO SORT THE
DATA BY CLICKING ON THE HEADER COLUMN WITHIN EACH DATAGRID.
USING A SEPERATE PAGE REQUIRES ME TO PASS ALL THE FILTER AND SORT PARAMS
TO THE 2ND PAGE AND RE-DATABIND ALL THE GRID(S) (REQUIRING ANOTHER ROUND TRIP TO THE DB).
USING THE SAME PAGE IS MUST SIMPLER AND EFFICIENT. I DON'T HAVE TO SEND
ALL THE PAGE PARAMS, AND I DON'T EVEN HAVE TO RE-DATABIND THE GRIDS. I JUST
ADD THE GRID TO THE RENDER FUNCTION OF THE PARENT PAGE AND THE GRID(S) ARE RENDERED BASED ON THEIR CURRENT VIEWSTATE.
IF AT ALL POSSIBLE, I WOULD LIKE TO STAY WITH THE SINGLE PAGE IMPLEMENTATION.
----- AFTER MORE INITIAL TESTING I HAVE FOUND THAT SOME VERSIONS OF IE6 ON WINXP DON'T PROMPT TWO DIALOGS. THE IE VERSIONS ARE THE SAME, BUT ONE HAS MORE UPDATES:
THIS ONE PROMPTS TWICE: IE VERSION ON WINXP: 6.0.2800.1106.X PSP2.030422-1633 UPDATES: SP1, Q328970, Q324929, Q810847, Q813951, Q813489, Q330994,
Q818529, Q822925, Q828750, 824145
THIS ONE PROMPTS ONCE: IE VERSION ON WINXP: 6.0.2800.1106.X PSP2.030422-1633 UPDATES: SP1, Q810847, Q813951, Q813489, Q330994, Q818529, Q822925,
Q828750, 824145 IT DOES NOT INCLUDE: Q328970, Q324929 ....SO MAYBE IT HAS SOMETHING TO DO WITH ONE OF THESE UDPATES. As for the second problem. You said that " the encoding of the page is
set to Western European (Windows) versus UTF-8" and some "wingding fonts " doesn't display correctly. Do you means that when the document is
opended in the browser, the Encoding of the browser is set as "western European" rather than "UTF-8"?
YES, THAT IS CORRECT.
And if you change the browser's view->encoding to "UTF-8", does those "wingding fonts " display correctly?
YES, THAT FIXED IT!!!! ONE QUESTION THOUGH, OUT OF THE BOX, WHAT IS IE'S DEFAULT ENCODING? I DON'T RECALL CHANGING THIS SETTING ON ANY OF OUR TEST MACHINES.
If it can display correctly when you set the browser's view->encoding as "UTF-8", the problem is caused by the client browser's default encoding setting. Since the default encoding of the client browser is set as "western European", when you open a certain page in the browser, it will always first display using the default setting. This feature is not set via the serverside code.
If the "wingding fonts" still can't display correctly when you chang the browsesr's view->encoding to "UTF-8", I think the problem is likely due
to the "wingding fonts" which can't display well in UTF-8. Thus, would you please provide some of the "wingding fonts" which can't display well so that I can do further research on them?
Please try out the preceding suggestion to see whether it helps. Also if you have any questions on it, please feel free to let me know.
Steven Cheng Microsoft Online Support
Get Secure! www.microsoft.com/security (This posting is provided "AS IS", with no warranties, and confers no rights.)
Hi Brian ,
Thank you for the prompt response. As the problem you descirbed in the
response, I think you can try this:
In IE, click View, point to Encoding. Uncheck "Auto Select" and select
"UTF-8"
Please do uncheck the "Auto Select", then, when you open IE in other
document, the Encoding will focus on "UTF-8"
However, since such operations are on client side. So if the user used to
set the IE's encoding as other options(not UTF-8). He still should to
change it manually. Also, I've reviewed some references on IE'S setting,
the algorism IE uses to set encoding for a page is below:
1. If the web page has set the language encoding to use, IE will use the
encodin
g.
2. If the web page has not set the language encoding to use and IE uses
Auto-Sel
ect, IE will determine which one is the best encoding.
3. If the web page has not set the language encoding to use and IE doesn¡¯t
uses
Auto-Select, IE will use the default encoding. The fault encoding is at
[HKEY_C
URRENT_USER\Sof tware\Microsoft \Internet Explorer\Intern ational]
Defalt_CodePage .
Yes, generally, wo may try editing the registry via script(such as change
IE'S print setting). However, for the encoding setting, IE has its own
algorism to decide the encoding method, customer cannot use her own ActiveX
control(also script) to change it.
If you have any questions on it, please feel free to let me know.
Steven Cheng
Microsoft Online Support
Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
Here's what i've come up with which fixes both issues:
1) Render the controls to a new HtmlTextWriter
2) convert the rendered control text to a byte array
3) store it to a image type in a db.
4) then Response.Redire ct() to a printerfriendly .aspx and pass the record id
of the rendered content from step 3.
by persisting the content to the db and redirecting to a second page:
1) IE does not prompt the open dialog twice.
2) the encoding seems to work correctly.
I haven't had a chance to test for performance. but we are using a pretty
hefty (dual proc/gobs of ram) db server. So i'm hoping performance will be
ok.
"MSFT" <v-******@online.m icrosoft.com> wrote in message
news:qG******** ******@cpmsftng xa07.phx.gbl...
Hi Brian ,
Thank you for the prompt response. As the problem you descirbed in the response, I think you can try this:
In IE, click View, point to Encoding. Uncheck "Auto Select" and select "UTF-8"
Please do uncheck the "Auto Select", then, when you open IE in other document, the Encoding will focus on "UTF-8"
However, since such operations are on client side. So if the user used to set the IE's encoding as other options(not UTF-8). He still should to change it manually. Also, I've reviewed some references on IE'S setting, the algorism IE uses to set encoding for a page is below: 1. If the web page has set the language encoding to use, IE will use the encodin g.
2. If the web page has not set the language encoding to use and IE uses Auto-Sel ect, IE will determine which one is the best encoding.
3. If the web page has not set the language encoding to use and IE
doesn¡¯t uses Auto-Select, IE will use the default encoding. The fault encoding is at [HKEY_C URRENT_USER\Sof tware\Microsoft \Internet Explorer\Intern ational] Defalt_CodePage .
Yes, generally, wo may try editing the registry via script(such as change IE'S print setting). However, for the encoding setting, IE has its own algorism to decide the encoding method, customer cannot use her own
ActiveX control(also script) to change it.
If you have any questions on it, please feel free to let me know.
Steven Cheng Microsoft Online Support
Get Secure! www.microsoft.com/security (This posting is provided "AS IS", with no warranties, and confers no rights.) This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: peetm |
last post by:
I'd like to write to a log whenever a visitor to my site downloads a
file. So, I'd like the link they click to be to a php 'page' that
returns the file. Don't know how to do that!
Side Question ...
Presumably, the dialog that you see when you download a binary (asking
for a 'Save As...' file name) is put up by your browser when it 'sees'
non-text data coming back as a response? So, how would you download a
text file - and cause...
|
by: Ken |
last post by:
How do I download files from the internet server to my computer?
How do I tell the script the correct hard drive folder on my computer to
copy the files to?
After connecting to the internet server, I am trying:
$_SESSION = "/uploaddir/"; // directory on server
$_SESSION = "c:/_picture_file/"; // directory on
computer
|
by: Tom Youngquist |
last post by:
I am trying to download a text file that my .NET page has just created based
on entered parameters on the web page. Everything seems to work and the file
is created. I am using the following code to start the download process:
Response.Clear()
Response.ContentType = "text/plain"
Response.AppendHeader("Content-Disposition", "attachment; filename="
& fileName)
Response.AppendHeader("Content-Description", "This is your Cost
Journal...
|
by: Sleepy |
last post by:
I am wanting to allow a client to download a file from a web server and save it on their local PC. The only way that I have found to do this is to use HTTP headers. I am using the code shown below (which I have copied with some variable name changes) from a book on ASP.NET programming. This code sits in the Page_Load event of a file called 'Download.aspx'. In order to send a file to the client, this page is called from another page (using...
|
by: moondaddy |
last post by:
I have a asp.net app where a user will need to download multiple files at
once.
Below is some sample code I'm using to download a single file which works
perfectly, however, rather than a single file, I need to download all the
image files for a single order being processed by the user. Is it possible
to download a batch or group of files?
Thanks.
| |
by: GRE |
last post by:
I'm hoping someone can help with this problem; I've seen only a handful of
postings related to it, but with no clear resolution.
I have an ASP.NET 1.1 page that downloads requested files via the
"Response.BinaryWrite(...)" method. The problem is that the page is
dynamically built, and after the download completes all javascript functions
suddenly break or exhibit unpredictable behavior.
I've traced the issue down the use of the...
|
by: ckarbass |
last post by:
I'd like for the file download dialog to be launched upon page load.
The workflow or behavior is exactly the same as sourceforge's.
I've searched on google to no avail. Any help would be appreciated.
Thanks.
|
by: allan.s.palmer |
last post by:
Hello,
I have an asp.net pop up that is generating a Word document real time
and sending it to the user by sending the appropriate response
headers. When it is run on our development environment it works fine
in both IE6 and IE7. We recently moved this to our UAT environment
and it works fine for IE7, but IE6 users are getting the option to
only download or save the .aspx page, not the generated .doc file.
Has anyone run into an...
|
by: KevinADC |
last post by:
Note: You may skip to the end of the article if all you want is the perl code.
Introduction
Many websites have a form or a link you can use to download a file. You click a form button or click on a link and after a moment or two a file download dialog box pops-up in your web browser and prompts you for some instructions, such as “open” or “save“. I’m going to show you how to do that using a perl script.
What You Need
Any recent...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |