快速业务通道

庖丁解牛Asp.net3.5控件和组件开发技术系列—页面状态机制(四)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
     <asp:Button ID="Button1" runat="server" Text="提交页面" OnClick= "Button1_Click" />
   </div>
   </form>
</body>
//然后在Page_Load中增加页面首次请求时的属性赋值 
protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
     ViewStateTypeConverter1.SolidCoordinate = new KingControls.Solid Coordinate(1, 2, 3);
   }
}
protected void Button1_Click(object sender, EventArgs e)
{
   this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "OutputResult", "alert(''(X:" + ViewStateTypeConverter1.SolidCoordinate. X.ToString() + ",Y:" + ViewStateTypeConverter1.SolidCoordinate.Y.ToString() + ",Z:" + ViewStateTypeConverter1.SolidCoordinate.Z.ToString() + ")'');", true);
}

在上面的代码中还增加了"提交"按钮的事件,主要是通过客户端alert方法输出当前控件的属性值。通过输出结果确认视图状态是否成功保存,如果输出值不等于我们设置的(1,2,3),则说明该属性没有保存到视图状态中。

在浏览器中运行页面。由于这是页面第一次请求,会执行Page_Load中的控件赋值语句,给控件的属性SolidCoordinate赋值(1,2,3),然后单击"提交"按钮,输出结果如图6-7所示。

通过示例证明,现在主控件还不能对属性SolidCoordinate进行视图状态保存,还得我们自己去实现这个功能。OK,继续在主控件中增加视图状态相关的两个方法LoadViewState和SaveViewState,这两个方法最终的代码如下:

图6-7 SolidCoordinate属性值没有保存到ViewState中

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
public class ViewStateTypeConverter : WebControl 
{
   //… …
   protected override object SaveViewState()
   {
     Pair p = new Pair();
     p.First = base.SaveViewState();
     SolidCoordinateConverter convert = new SolidCoordinateConverter();
     p.Second = convert.ConvertTo(null, null, this.SolidCoordinate,typeof (string));
     for (int i = 0; i < 2; i++)
     {
       if (p.First != null || p.Second != null)
       {
         return p;
       }
     }
     return null;
   }

   protected override void LoadViewState(object savedState)
   {
     if (savedState == null)
     {
       base.LoadViewState(null);
       return;
     }
     else
     {
       Pair p = (Pair)savedState;
       if (p == null)
       {
         throw new ArgumentException("无效的View State 数据!");
       }
       base.LoadViewState(p.First);
       if (p.Second != null)
       {
         SolidCoordinateConverter convert = new SolidCoordinate Converter();
         this.SolidCoordinate = convert.ConvertFrom(null, null, p.
         Second) as SolidCoordinate;
       }
    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号