在开发过程,当面对纷杂的无类型的页面变量时,实在让人心烦。在获取页面变量时,我希望做到一下几点:
- 调用简单、代码简单。
- 强类型、防止书写出错、方便开发。
- 避免异常、有较好的性能。
- 统一显示参数错误、较好的用户体验。
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; }
}
}
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;
}
}
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;
}
}
感谢浏览,欢迎评论,转载请保留作者!