LocalizedDisplayNameAttribute class for Asp.Net MVC2

For whatever reason, in MVC2 the DisplayName attribute isn’t localizable in the way that ValidationAttributes are – it doesn’t have a constructor that looks up resources.

So here’s how to localise DisplayName:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
    public LocalizedDisplayNameAttribute(Type resourceType, string resourceKey) : base(LookupResource(resourceType, resourceKey)) {  }
    public LocalizedDisplayNameAttribute(Type resourceType) : base(LookupResource(resourceType, DisplayNameAttribute.Default.DisplayName) ) { }

    internal static string LookupResource(Type resourceType, string resourceKey)
    {
        return new ResourceManager(resourceType).GetString(resourceKey) ?? resourceKey;
    }
}

Note! This will all fail dismally unless … your resource file is marked as public, rather than internal. Because Views are not compiled as part of the web project assembly, rather they are compiled at runtime by the asp.net compiler into a different assembly

Don’t do iisreset do …

a mini batch file in your start menu, when you’re debugging the application startup of a .Net application, and keep wanting to restart it:

taskkill /im aspnet_wp.exe /f
if not errorlevel == 0 pause

or

taskkill /im w3wp.exe /f
if not errorlevel == 0 pause

which does the job much faster.

Assuming, of course, that your reason for wanting to do an iis reset was to force a .Net application restart. And you don’t mind forcing all running .Net applications to restart. And you’re not on a busy production machine at rushhour.

Asp.Net Required Field Validator for a DropDownList

A required field seems a bit odd for a dropdown list because it’s got a value whether you like it or not. But when you feel that your dropdown list should have a required value it’s usually because, you’ve given it an initial value of “–please select–” or somesuch and you want to validate that a ‘real’ value has been chosen.

Easy. Set the InitialValue property:

<asp:requiredfieldvalidator ControlToValidate="ddlMyPickList" 
    Text="*" InitialValue="-1"
    ErrorMessage="You must choose a value"
    runat="server" ID="rfvDdlMyPickList"/>

Specifically, set it to the Value (not the Text) of the ‘please select’ item you added.

Prevent an Asp.Net Button from triggering a Postback

Sometimes, you want an Asp.net Button to not trigger a postback.

One solution is, don’t use an asp.net button, use an html input or link tag instead. However, you may want to use an asp:XXXButton for consistency with the rest of your page; or it may seem a simple way to make the text on the button localisable (although you can equally achieve that on a plain old html control if you give it an id, a runat=”server” and probably a meta:resourcekey); or you may have other stuff you want to do with it serverside.

To stop an asp.net button causing a postback, do it like this:

<asp:LinkButton id="btnX" OnClientClick="return false;" runat="server"/>

The more likely scenarios is, that you want to run clientside javascript. In that case, put “;return false;” after your javascript call:

<asp:LinkButton id="btnX" OnClientClick="functionToCall();return false;" runat="server"/>