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

最近做东西逐渐边做边重构了,重构完看到精简的代码感觉非常爽的说~哈哈 
前天从图书列表页提取出一个用户控件,这个玩意是用来按字段排序图书,选择每页显示数量的。它里面要用到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的问题!

转载于:https://www.cnblogs.com/zagelover/articles/3401986.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值