Wednesday, September 30, 2009

Coding Tips for ASP .NET

I came across this article that will most certainly help out beginners of ASP .NET programming.


1.Smart navigation

Smart navigation is a little-known Internet Explorer feature that enables the individual controls on your Web forms to maintain focus between postback, as well as allows you to suppress that flicker that occurs as you load the new page.
To turn on this little-known feature, simply set the smartNavigation property of your ASPX page to True. You can also apply the property to all project pages, by adding the tag to the following location within your Web.config file:





Note that smart navigation works on only Internet Explorer 5 and above; however, ASP.NET will automatically detect this and serve up the ?smart? code only if the target browser supports it.

Also, I?d personally advise that you test it against any third-party menu controls or scripts you may have running: it is prone to falling over on particularly advanced pages.

2.Stopping Your User from Right-Clicking

Want to prevent your user from performing any of the other commands available by right-clicking on a Web page in Internet Explorer? It?s not foolproof, but this neat little HTML edit usually does the trick.

Just alter the opening BODY tag of your HTML to the following: oncontextmenu="return false".


When the menu is requested, the oncontextmenu event runs, and we instantly cancel it using JavaScript. This is especially potent as a method for stopping the user from viewing your source, when used in conjunction with a menu-less browser window. Great stuff!

3.Creating Images Dynamically

Ask any ASP developer who has ever tried to dynamically create his own images and he?ll tell you it?s a nightmare. In fact, it?s more than a nightmare. It?s practically hell. The only true solution? Reverting to an expensive, dodgy, third-party control to do the work for you.

With ASP.NET, however, you can develop your own dynamic images with ease. Simply create an image object and use the new GDI+ features to add objects to that image, such as text, rectangles, and ellipses. After that, you can simply stream straight back down to the client.

But covering the graphics features in depth would require at least another two books, and, unfortunately, we don?t have that much room. So, I?m going to share a sample that demonstrates creating a small ?Drawing? button, alongside a little blue-and-yellow bullet point.It?s the sort of personalized graphic you?ll find on sites such as Amazon.com.

Here?s the code:

Bitmap objBitmap = new Bitmap(120, 30);
Graphics objGraphics = Graphics.FromImage(objBitmap);
objGraphics.FillRectangle(new SolidBrush(Color.LightBlue), 0, 0, 120, 30);
objGraphics.FillEllipse(new SolidBrush(Color.Blue), 3, 9, 10, 10);
objGraphics.FillEllipse(new SolidBrush(Color.Yellow), 4, 10, 8, 8);
objGraphics.DrawString("Drawing", new Font("Tahoma", 8), new SolidBrush(Color.Green), 16, 8);
Response.Clear();
Response.ContentType = "image/jpeg";
objBitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
objGraphics.Dispose();
objBitmap.Dispose();

You can put it inside any event you want.

4.Clear All The Textbox Values (Reset Function)

In Classic ASP, to clear all the textboxes in a form, to start over, we just had to use a simple html 'Reset' button in the form. Sometimes that works in ASP.Net;sometimes it doesn't.

Here are a couple of ways to do this, iterating through the ASP.Net TextBox controls in a form --
Just create a Reset type subroutine - in that routine, use the following code:
in C# - it would be:

Control myForm = Page.FindControl("Form1");
foreach (Control ctl in myForm.Controls)
if(ctl.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox"))
((TextBox)ctl).Text = "";

This will clear EVERYTHING from the textboxes - even if you had them pre-populated with data. A VERY simple way to just reset it to the condition at Page_Load time, just do this in the Reset SubRoutine:

Server.Transfer("YourPageName.aspx")

5.Pressing Enter key

Sometimes, you will notice, that, in an ASP.Net form, depending on the circumstances, pressing the 'Enter' key to submit the form does not work.

To force this to happen for a particular button on your page, just put this in the Page_Load routine:

Page.RegisterHiddenField("__EVENTTARGET", "button1")

Then, change 'button1' to the ID of your particular button. Understand, of course, if your cursor is inside of a MultiLine textbox, the default action of the enter key is to create a new line in the textbox, so, if this basically works anywhere outside of that scenario.

6.ASP.Net Server Controls Not Showing on pages

It's possible that ASP.Net is not registered correctly on your system.Try running aspnet_regiis from the command prompt.

Here's the default location:

C:\WINDOWS\Microsoft.NET\Framework\<>\aspnet_regiis.exe -i

Windows Server 2003, you must use aspnet_regiis -i -enable. This is because of the "Web Service Extensions" feature in IIS 6


I basically copied the stuff from http://www.codersource.net/asp_net_simple_tips.html for my own reference and for others.

Wednesday, July 1, 2009

Visual SourceSafe vs Visual Studio Team Foundation Server

Visual SourceSafe
  • Visual SourceSafe 2005 is a completely self-contained system that requires no other software.
  • Some teams or individuals will only need source code control. Visual SourceSafe 2005 is simple, lightweight, and easy to use, and so it is ideally suited for this type of customer.
  • The desktop-based nature of Visual SourceSafe is suitable for basic file sharing for teams who need occasional collaboration; it is not intended for scenarios where a high degree of parallel development is required.
  • Visual SourceSafe is licensed individually.


Visual Studio Team Foundation Server
  • Visual Studio 2005 Team Foundation Server is a server-based system that leverages several Microsoft technologies: IIS, SharePoint Services and SQL Server 2005.
  • Visual Studio 2005 Team Foundation Server supports the full spectrum of software configuration management functionality for projects that requires a detailed level of requirements management, auditing, and project management.
  • Team Foundation Server picks up where Visual SourceSafe 2005 leaves off in these respects. Its server-based nature is ideal for geographically distributed teams.
  • Team Foundation Server is licensed on a server and CAL (client access license) model. For customers who will be adopting one of the Visual Studio Team System client components, using Team Foundation Server is the obvious choice, from a cost perspective.


The original article can be found at: http://www.neokobe.nl/team-foundation-server-vs-sourcesafe.php

Wednesday, June 24, 2009

MagOnline Theme for Wordpress - Top Commentators Error

In one of our Wordpress projects, we used the MagOnline, from Elegant Wordpress Themes. The theme adds some useful and handy information at the bottom, which includes Tag Cloud, Top Commentators, Partners and Recent Comments. After downlaoding and installing the theme I found that in the Top Commentators section it was giving me the following error message:

Warning: Invalid argument supplied for foreach() in wp-content\themes\magonline\functions.php on line 621
Now first of all I will describe why the error is coming up. This error shows up when there are no comments in the database, since there are no comments hence the system cannot find a top commentator. A scenario that should have been taken care of, as this is the simplest of them all. So now we know why the error was showing up we can get busy with how to fix it. We have the following two solutions:

The Simplest Solution (If you are not tech savvy or are in a hurry)

Just add a comment. This could be any comment on any post and the error will be gone.

The Proper Solution

This solution requires a good understanding of PHP. If you go in to the file mentioned in the error i.e. wp-content\themes\magonline\functions.php, you will find a function top_commentators the following code:
function top_commentators($limit=8){
global $wpdb, $post;
//$top = $wpdb->get_results("SELECT $wpdb->comments.comment_author, comment_author_url, comment_ID, COUNT($wpdb->comments.comment_post_ID) AS 'comment_total' FROM $wpdb->comments WHERE comment_approved = '1' LEFT JOIN $wpdb->comments ON $wpdb->comments.comment_author = $wpdb->comments.comment_author WHERE comment_approved = '1' LIMIT 4");
$top = $wpdb->get_results("SELECT * FROM $wpdb->comments");
foreach ($top as $t){
$comm[$t->comment_author][] = $t;
$commlink[$t->comment_author] = $url = $t->comment_author_url=="http://"?"mailto:".$t->comment_author_email:$t->comment_author_url;
}
$x=0;
foreach ($comm as $t2n=>$t2v){
if ($x<=$limit){ $comm2[$t2n] = sizeof($t2v); } $x++; } foreach ($comm2 as $t3n=>$t3v){
echo '' . $t3n . ' (' . $t3v . ')';
}
}

just replace it with the following:
function top_commentators($limit=8){
global $wpdb, $post;
//$top = $wpdb->get_results("SELECT $wpdb->comments.comment_author, comment_author_url, comment_ID, COUNT($wpdb->comments.comment_post_ID) AS 'comment_total' FROM $wpdb->comments WHERE comment_approved = '1' LEFT JOIN $wpdb->comments ON $wpdb->comments.comment_author = $wpdb->comments.comment_author WHERE comment_approved = '1' LIMIT 4");
$top = $wpdb->get_results("SELECT * FROM $wpdb->comments");
// Looks like the plug-in writers forgot to handle the scenario when there are no comments in the Wordpress database
if(!empty($top))
{
foreach ($top as $t)
{
$comm[$t->comment_author][] = $t;
$commlink[$t->comment_author] = $url = $t->comment_author_url=="http://"?"mailto:".$t->comment_author_email:$t->comment_author_url;
}
$x=0;
foreach ($comm as $t2n=>$t2v)
{
if ($x<=$limit) { $comm2[$t2n] = sizeof($t2v); } $x++; } foreach ($comm2 as $t3n=>$t3v)
{
echo '' . $t3n . ' (' . $t3v . ')';
}
}// end of if(!empty($top))
}

And you are good to go. The code has not changed simply a check has been added before the the loops, just to make sure that the result set that is being fetched from MySQL is not empty and that does the trick. Hope this helps :)

Saturday, June 13, 2009

Facebook Username

As of today Facebook has added the functionality of users being able to select usernames. The immediate benefits of this are:
  • Users will be able to direct their friends to their profile in:
    • a more direct and easy manner
    • Profile links can now be shared verbally
  • Facebook was nagging behind in this are when compared with other social networking services like LinkedIn and MySpace, which already allow their users to share their profiles in the above manner.
So hurry up and get your username, before its taken up by someone else. To select a username for Facebook visit: http://www.facebook.com/username/

The good thing about Facebook usernames are that they allow you to have  periods (.) in the username and the suggested usernames are also very good.

Now since Orkut is trying to memic Facebook, we may see the username feature being implemented on Orkut as well in some time (just a guess, do not bet on it).