快速业务通道

Asp.net ViewState——自定义状态管理(二)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

在上一篇ViewState——自定义状态管理(一)中我在自定义属性的类里面加入了一个重写的ToString方法和一个从字符串获取一个该类型实例的一个构造函数。大家可能会觉得谈到自定义属性的状态管理却不提及TypeConverter(Attribute),有些神奇。好吧,下面就来说说TypeConverter。

先看下MSDN的解释:提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。

在上一篇我自己写了两个方法而没有使用TypeConverter就是想从一方面说明TypeConverter的作用(从这一点来说就是类型转换)。当然TypeConverter还有很多其他用途,比方说提供一组标准值什么的。因此在通常情况下我们都使用TypeConverter来完成这些工作(即使仅仅是只处理类型转换的问题)。就个人理解,TypeConverter是我们在属性窗体为控件属性输入值以及在aspx或ascx声明控件给控件属性赋值时使用的,它可以控制怎样将我们的输入转换成控件属性对应的类型。您可能会说,其实我们自己也可以调用它来做些操作啊,对,这样也可以。

首先,修改下以前的例子:

ViewStateManagement4

namespace Controls
{
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Web.UI;
  using System.ComponentModel;
  using System.Globalization;
  
  public class ViewStateManagement4 : Control
  {
    private CustomProperty4 m_Property;
    [DesignerSerializationVisibility( DesignerSerializationVisibility.Content )]
    public CustomProperty4 Property
    {
      get
      {
        if (m_Property == null)
        {
          m_Property = new CustomProperty4();
        }
  
        return m_Property;
      }
      //set
      //{
      //}
    }
    protected override void LoadViewState(object savedState)
    {
      if (savedState is Pair)
      {
        Pair properties = (Pair)savedState;
        base.LoadViewState(properties.First);
        m_Property = (CustomProperty4)properties.Second;
      }
      else
      {
        base.LoadViewState(savedState);
      }
    }
    protected override object SaveViewState()
    {
      object baseState = base.SaveViewState();
      if (Property != null)
      {
        return new Pair( baseState, Property);
      }
      return baseState;
    }
    protected override void TrackViewState()
    {
      base.TrackViewState();
    }
  
    protected override void Render(HtmlTextWriter writer)
    {
      //CustomTypeConverter c = new CustomTypeConverter();
      //c.ConvertTo(null, CultureInfo.InvariantCulture, Property, typeof(string));
      //writer.Write(c.ConvertTo(null, CultureInfo.InvariantCulture, Property, typeof(string)));
  
      writer.Write(TypeDescriptor.GetConverter(Property.GetType()).ConvertTo(null, CultureInfo.InvariantCulture, Property, typeof(string)));
    }
  }
  [TypeConverter(typeof( CustomTypeConverter))]
  public class CustomProperty4
  {
    private string m_Pr

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号