在开发过程,当面对纷杂的无类型的页面变量时,实在让人心烦。在获取页面变量时,我希望做到一下几点:
- 调用简单、代码简单。
- 强类型、防止书写出错、方便开发。
- 避免异常、有较好的性能。
- 统一显示参数错误、较好的用户体验。
下例“PageVariableCommon ”是获取页面变量的通用类。本例通过主要通过泛性和TryParse实现以上目的。
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;


/**/
/// <summary>
/// Summary description for PageVariableCommon
/// </summary>
public
abstract
class
PageVariableCommon

...
{

/**//// <summary>
/// when Get page variable error, system will redirect to this url.
/// </summary>
private static readonly string InvalidationParamPage = "/WEB/ParamInvalidation.aspx"; //Hard Card. ConfigManager.WebDomain + ConfigManager.InvalidationParamPage;

/**//// <summary>
///Get page variable and ignore regardless of empty
/// </summary>
/// <param name="variableName">Variable name</param>
/// <returns></returns>
public static string GetVariable(string variableName)

...{
return GetVariable(variableName, false);
}

/**//// <summary>
/// Get page variable
/// </summary>
/// <param name="variableName">Variable name</param>
/// <param name="noneValueRedirect">If true system will redirect to Error Page when Variable is empty. else not</param>
/// <returns></returns>
public static string GetVariable(string variableName, bool noneValueRedirect)

...{
if (!string.IsNullOrEmpty(Request[variableName]))

...{
return Request[variableName];
}
else

...{
ValueNullHandle(variableName, noneValueRedirect);
}
return string.Empty;
}

/**//// <summary>
/// Get page variable
/// </summary>
/// <typeparam name="T">Variable name</typeparam>
/// <param name="variableName"></param>
/// <returns></returns>
public static T GetVariable<T>(string variableName) where T : IConvertible

...{
return GetVariable<T>(variableName, false);
}

/**//// <summary>
/// Get page variable
/// </summary>
/// <typeparam name="T">Variable name</typeparam>
/// <param name="variableName"></param>
/// <param name="noneValueRedirect">If true system will redirect to Error Page when Variable is empty. else not</param>
/// <returns></returns>
public static T GetVariable<T>(string variableName, bool noneValueRedirect) where T : IConvertible

...{
if (!string.IsNullOrEmpty(Request[variableName]))

...{
string variable = Request[variableName];
switch (Type.GetTypeCode(typeof(T)))

...{
case TypeCode.Int32:

...{
int n;
if (int.TryParse(variable, out n))

...{
return (T)Convert.ChangeType(variable,typeof(T));
}
break;
}
case TypeCode.DateTime:

...{
DateTime datetime;
if (DateTime.TryParseExact(variable,"u",null,System.Globalization.DateTimeStyles.AssumeUniversal,out datetime))

...{
return (T)Convert.ChangeType(datetime, TypeCode.DateTime);
}
break;
}
case TypeCode.Int64:

...{
long n;
if (long.TryParse(variable, out n))

...{
return (T)Convert.ChangeType(variable, typeof(T));
}
break;
}
case TypeCode.Boolean:

...{
bool b;
if (bool.TryParse(variable, out b))

...{
return (T)Convert.ChangeType(variable, typeof(T));
}
break;
}
case TypeCode.Decimal:

...{
decimal d;
if(decimal.TryParse(variable,out d))

...{
return (T)Convert.ChangeType(variable, typeof(T));
}
break;
}
case TypeCode.Double:

...{
Double d;
if (Double.TryParse(variable, out d))

...{
return (T)Convert.ChangeType(variable, typeof(T));
}
break;
}
default:

...{
try

...{
return (T)Convert.ChangeType(variable, typeof(T));
}

catch ...{ }

break;
}

}
TypeErrorHandle(variableName, noneValueRedirect);
return default(T);
}
else

...{
ValueNullHandle(variableName, noneValueRedirect);
}
return default(T);
}

/**//// <summary>
///
/// </summary>
/// <param name="variableName"></param>
/// <param name="isRedirect"></param>
private static void ValueNullHandle(string variableName, bool isRedirect)

...{
if (isRedirect)

...{
Response.Redirect(string.Format("{0}?variableName={1}&none=True&URL={2}", InvalidationParamPage, variableName, HttpUtility.UrlEncode(Request.Url.AbsoluteUri)), true);
}
}

/**//// <summary>
///
/// </summary>
/// <param name="variableName"></param>
/// <param name="isRedirect"></param>
private static void TypeErrorHandle(string variableName, bool isRedirect)

...{
if (isRedirect)

...{

Response.Redirect(string.Format("{0}?variableName={1}&variableValue={2}&URL={3}", InvalidationParamPage, variableName, Request[variableName], HttpUtility.UrlEncode(Request.Url.AbsoluteUri)), true);
}
}


/**//// <summary>
///
/// </summary>
private static HttpResponse Response

...{

get ...{ return HttpContext.Current.Response; }
}

/**//// <summary>
///
/// </summary>
private static HttpRequest Request

...{

get ...{ return HttpContext.Current.Request; }
}

}
下面“BookReservationParameter”类是一个处理页面参数的示例。
由于页面参数交多且易变、调用的页面多、甚至一些参数需要加密,这里就对参数进行简单封装的处理。大家可根据实际 需求调整,本例尽供参考。
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;


/**/
/// <summary>
/// Summary description for BookReservationParameter
/// </summary>
public
class
BookReservationParameter

...
{
private static readonly string mBookURL = ConfigManager.WebDomain + "/Concierge/BookReservation.aspx?Size={0}&Time={1}&locationid={2}&correlationData={3}&SessionId={4}&GuestId={5}&RestaurntId={6}";
int mLocationId;
DateTime mDinnerDateTime;
string mCorrelationDate;
string mSessionId;
int mSize;
long mGuestId;
int mRestaurantId;

private BookReservationParameter()

...{
}

/**//// <summary>
///
/// </summary>
/// <param name="locationid"></param>
/// <param name="dinnerDateTime"></param>
/// <param name="correlationdate"></param>
/// <param name="sessionId"></param>
/// <param name="size"></param>
public BookReservationParameter(int locationid, DateTime dinnerDateTime, string correlationdate, string sessionId, int size)

...{
mLocationId = locationid;
mDinnerDateTime = dinnerDateTime;
mCorrelationDate = correlationdate;
mSessionId = sessionId;
mSize = size;
}

/**//// <summary>
///
/// </summary>
/// <returns></returns>
public string GetURL()

...{
string url = string.Format(mBookURL, mSize, mDinnerDateTime.ToUniversalTime(), mLocationId, mCorrelationDate, mSessionId, mGuestId, mRestaurantId);
return url;
}
public int LocationId

...{

get ...{ return mLocationId; }

set ...{ mLocationId = value; }
}
public DateTime DinnerDateTime

...{

get ...{ return mDinnerDateTime; }

set ...{ mDinnerDateTime = value; }
}
public string CorrelationDate

...{

get ...{ return mCorrelationDate; }

set ...{ mCorrelationDate = value; }
}
public string SessionId

...{

get ...{ return mSessionId; }

set ...{ mSessionId = value; }
}
public int Size

...{

get ...{ return mSize; }

set ...{ mSize = value; }
}
public long GuestId

...{

get ...{ return mGuestId; }

set ...{ mGuestId = value; }
}
public int RestaurantId

...{

get ...{ return mRestaurantId; }

set ...{ mRestaurantId = value; }
}

/**//// <summary>
///
/// </summary>
/// <returns></returns>
public static BookReservationParameter GetIntance()

...{
BookReservationParameter a = new BookReservationParameter();
a.LocationId = PageVariableCommon.GetVariable<int>("LocationId", true);
a.DinnerDateTime = PageVariableCommon.GetVariable<DateTime>("DinnerDateTime", true);
a.CorrelationDate = PageVariableCommon.GetVariable("CorrelationDate", true);
a.SessionId = PageVariableCommon.GetVariable("SessionId", true);
a.Size = PageVariableCommon.GetVariable<int>("Size", true);
a.GuestId = PageVariableCommon.GetVariable<long>("GuestId");
a.RestaurantId = PageVariableCommon.GetVariable<int>("RestaurantId");
return a;
}
}
感谢浏览,欢迎评论,转载请保留作者!