.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的问题!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值