ASP.NET网页之间传递参数与值,方法很多,可以使用Application,Cookie,Session,或是Querystring等等。
由于Insus.NET开发的程序中,多数是在后台之间进行参数与值传递,因此很少使用Querystring,而是使用Session。Session? 我也会。 是的,使用Session进行传递参数与值,懂开发的程序员都会。
使用Session传递网页之间的参数与值,可以做到轻微量级或是轻量级。
为了参数与值方便进行管理,Insus.NET会把这些存放一个集合内,时行传递。 在专案中,会创建一个类别。
上图中,20#代码,是一个静态方法,它有两个参数,一个是Dictionary<object,object>和一个string url。参数集合将被存入Session来传递,而url是目标网页的地址。就是这样简单。
而30#和32#行代码,那是一个扩展方法。是判断参数集合在添加参数时是否已经存在,存在的话,只是修改参数据值即可。
这样子就行了。
来演示一下吧。在网站点创建两个网页,PageA.aspx和PageB.aspx. 前者在用户点一点铵钮或某一事件处理完毕,把一些参数传至另外一个页面,而后者,是接收参数,再进行其它逻辑处理。
在PageA.aspx拉一个铵钮Button.
这些不是重点,重点在Button的Click事件中:
在pageB.aspx.cs接收参数:
第15,16行代码,如果用户直接在地址栏上输入.../PageB.aspx的话,网页会被导向PageA.aspx,也就是说,第一次不能直接访问PageB.aspx,而是需要先从PageA.aspx点击了铵钮之后,才可以进入pageB.aspx.
看看演示,演示是把源网页的路径传至目标网页中。
另外一个需要注意的是Session["TransferObject"]的名称"TransferObject"需要和最初创建一个类别InsusBase.TransferParameter()方法内的session名称相同。
是否有改善的地方,让在开发时,不必记住这样多session参数名呢?方法是有的。下面就是Insus.NET需要解决的地方。
打开InsusBase.cs类别,分三步实现:
在接收参数的网页,使用静态的属性来替代session以及session的参数名。这样解决可以上面所提及的问题。