Asp.net(C#)获取页面间变量[开发实战]


在开发过程,当面对纷杂的无类型的页面变量时,实在让人心烦。在获取页面变量时,我希望做到一下几点:

  1. 调用简单、代码简单。
  2. 强类型、防止书写出错、方便开发。
  3. 避免异常、有较好的性能。
  4. 统一显示参数错误、较好的用户体验。
下例“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;
    }

}



感谢浏览,欢迎评论,转载请保留作者!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值