While I am absolutely an advocate of table-less design, tables are still useful when used correctly. For instance, it is correct to use a table to display tabular data, or to show a form. I came across this extremely simple, but not well-known way to show and hide HTML table rows via the server. Say you have a table:
If you want to be able to control your rows on the backend, simply make your
<tr> a server tag! I know this seems simple, but at first to me, it appeared counter-intuitive. To do this, change your
<tr> to read:
<tr id="yourID" runat="server">. Then in your CodeFile you can access its properties, such as yourID.Visible!
Very simple, but hey, the best tricks are.
“Unknown runtime error”
I tried many different combinations of contents for the panel, but the only one that seemed to produce the error was whenever a form was present inside the panel. This was very frustrating, as no one around the internet community really seemed to have run across this error, and modifying the MasterPage to account for this single scenario would be a nightmare.
A working solution I came up with for this rare error is to wrap your content (on your .aspx page) with another UpdatePanel and set your triggers to post back when the button is pressed. While the client may have to suffer another postback, it’s not as bad as a total loss of functionality.
If you can find a more elegant solution to this problem, I would love to hear it!
EDIT (2/29/08): I believe the error occurs whenever you are using nested HTML forms within your runat=”server”. If you’re looking to post to another form, please see my article on integrating PayPal and Google Checkout.
Once you have your design converted into HTML/CSS, why should you have to worry about breaking it every time you create a new page? Abstract yourself from this with MasterPages, while still enabling yourself to easily make design changes. MasterPages are wonderful for standardizing your site and your design, in addition to making it easier to maintain and to build new pages. They are a very powerful and easily customizable way to template your site. This article is for those who don’t have much or any experience with MasterPages or are converting an old ASP.NET site to a MasterPage-driven site. If this is you, don’t be afraid—You can do it in just three easy steps!
1. Create a new MasterPage
Right click your project, go to “Add” and then “New Item…” and select MasterPage. Name it something useful, like “main.master” and hit ok. You should be presented with a barebones XHTML skeleton. Notice that your skeleton has this tag in it:
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server" />. This is the location where your content will be loaded from your .aspx pages. Fill your new MasterPage with the XHTML that you wish to use on every page. If you want some things to change based on certain variables, you can do so in the codebehind. Treat the MasterPage like any other .aspx page. The only thing different about it (on a basic level) is that it does not contain your content, but rather what encompasses your content.
2. Link your old pages to your MasterPage in the Page Directive
In your <%@ Page directive, add the following attribute:
3. Tell the MasterPage What Content Goes Where
If you only have one ContentPlaceHolder, you will add the following tag around all of your content in your .aspx pages:
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">Hello, World!
</asp:Content>, where “ContentPlaceHolder1” is the ID of the placeholder in your MasterPage that you linked to in step 2. If you have more than one ContentPlaceHolder in your MasterPage, simply wrap the tags around the correlating content.
And that’s it! That’s really all there is to it! Just apply steps 2 and 3 to each of your .aspx pages. There is an optional step for those who may have changed their pages’ codebehind inheritance:
4. Change CodeFile Inheritance
Simply replace whatever inheritance you have with
Please read my articles ASP.NET: How To Easily Reference MasterPage Members and my ASP.NET and AJAX: So Freaking Easy series for more tips on how to get yourself set up even better using MasterPages.
I am currently undergoing an upgrade on a legacy project trying to bring it into the “Web 2.0 AJAX” era and ran into a problem with dynamically uploading user controls. My perusings of the internet led me to a four-part series by Dave Reed (part of the ASP.NET team) entitled Truly Understanding Dynamic Controls. Even though it was written in 2006 (oh-so-long-ago), I believe that it is a must-read for any ASP.NET developer, even if you think you know how dynamic controls work.
Thanks so much for this article, Dave! It has truly been a lifesaver!