Often we have pages that have multiple optional querystrings. Here is a simple function that allows developers to write really clear code to get parameters from the querystring (or any other object that derives from NameValueCollection.
public static class QuerystringHelper
{
[ Extension ()]
public static int ? GetNullableInt (
NameValueCollection querystring ,
string param )
{
string str = querystring ( param );
int result = 0 ;
if (! string . IsNullOrWhiteSpace ( str ) && int . TryParse ( str , result )) {
return result ;
}
return null ;
}
}
or in vb…
Public Module QuerystringHelper
<Extension()>
Public Function GetNullableInt(
querystring As NameValueCollection,
param As String) As Integer?
Dim str As String = querystring(param)
Dim result As Integer
If Not String.IsNullOrWhiteSpace(str) AndAlso
Integer.TryParse(str, result) Then
Return result
End If
Return Nothing
End Function
End Module
To use it you simply use the following syntax:
VB
int ? categoryID = default ( int ?);
categoryID = Request . Querystring . GetNullableInt ( "CategoryID" );
if ( categoryID . HasValue ) {
//Filter by categoryID
}
CSharp
Dim categoryID As Integer?
categoryID = Request.Querystring.GetNullableInt("CategoryID")
If categoryID.HasValue Then
'Filter by categoryID
End If
Another quite common thing we do from querystring params is cast them to an enum.
I use the following helper to cast it to an enum, or default it to a patciular type.
Csharp
public static class QuerystringHelper
{
[ Extension ()]
public static T GetEnumOrDefault < T >(
NameValueCollection querystring ,
string param ,
T defaultEnum ) where T : struct
{
T myEnum = default ( T );
if ( Enum . TryParse ( querystring ( param ), myEnum )) {
return myEnum ;
} else {
return defaultEnum ;
}
}
}
VB
Imports System.Runtime.CompilerServices
Public Module QuerystringHelper
<Extension> _
Public Shared Function GetEnumOrDefault(Of T As Structure)(
querystring As NameValueCollection,
param As String,
defaultEnum As T) As T
Dim myEnum As T = Nothing
If [Enum].TryParse(querystring(param), myEnum) Then
Return myEnum
Else
Return defaultEnum
End If
End Function
End Module
This is awesome, because we can use even less code - and I think it’s really clear code to read.
CSharp
enum Category { Javascript , dotNet , html };
Category a = Request . QueryString .
GetEnumOrDefault < Category >( "CategoryType" , Category . Javascript );
VB
Public Enum Category
Javascript
dotNet
html
End Enum
Dim a As Category = Request.QueryString.
GetEnumOrDefault(Of Category)("Category", Category.Javascript)