注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

神殿天堂

神仙的家园

 
 
 

日志

 
 

.NET----在用户控件利用包装属性+反射,使用引用页的ViewState  

2013-11-01 15:09:00|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近做东西逐渐边做边重构了,重构完看到精简的代码感觉非常爽的说~哈哈 
前天从图书列表页提取出一个用户控件,这个玩意是用来按字段排序图书,选择每页显示数量的。它里面要用到ViewState保存排序字段和每页数量,为了灵活起见,把ViewState存到了引用页面的自定义一父类PageBaseProduct里,这样就可以随时在引用页改变ViewState的值了!然后在用户控件使用ViewState,运行发现错误:ViewState为空!!奇怪了,难道用户控件就不能使用引用页的ViewState吗??后来发现,ViewState是protected型,由于是在引用页的父类定义的,所以只能有引用页及其父类使用! 
这可咋办呢?上csdn吧!提个问题!一会就有人回答了,按他的方法:先在引用页父类加个排序字段属性SortField,并在构造方法里初始化个ViewState["SortField"],然后用SortField封装这个ViewState["SortField"],代码如下: 
public PageBaseProduct() 

    ViewState["SortField"] = "InsertTime"; 
    ViewState["SortType"] = "DESC"; 

public string SortField 

    get { return ViewState["SortField"].ToString(); } 
    set { ViewState["SortField"] = value; } 

最后在用户控件里利用反射,调用引用页绑定数据的私有方法: 
private PageBaseProduct p = null; 
private MethodInfo mi = null; 
AspNetPager pager = null; 
protected void Page_Load(object sender, EventArgs e) 

    p = this.Page; 
    Type ty = p.GetType(); 
    mi = ty.GetMethod("BindRp_Product");//BindRp_Product为引用页绑定数据的私有方法 

... 
//点击图片,按销量排序 
protected void ImgOrderByBuyCount_Click(object sender, ImageClickEventArgs e) 

    //可以通过修改引用页父类的SortField属性,修改其封装的ViewState["SortField"] 
    p.SortField = ImgOrderByBuyCount.CommandName; 
    ... 
    mi.Invoke(p, null);//参数p为mi代表的方法所属的对象,null为mi方法的参数 


这样,就解决了在不能在用户控件调用引用页ViewState的问题!

  评论这张
 
阅读(4)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018