Asp.net ViewState——自定义状态管理(二)
/// <returns></returns>
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(string))
{
return true;
}
return false;
}
/**//// <summary>
/// 从特定值进行转换
/// </summary>
/// <param name="context"></param>
/// <param name="culture"></param>
/// <param name="value"></param>
/// <returns></returns>
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
string str = (string)value;
string[] propertyValues = str.Split('';'');
if (propertyValues.Length == 2)
{
CustomProperty5 obj = new CustomProperty5();
obj.Property1 = propertyValues[0];
obj.Property2 = propertyValues[1];
return obj;
}
}
return base.ConvertFrom(context, culture, value);
}
/**//// <summary>
/// 转换成特定值
/// </summary>
/// <param name="context"></param>
/// <param name="culture"></param>
/// <param name="value"></param>
/// <param name="destinationType"></param>
/// <returns></returns>
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (value is CustomProperty5)
{
CustomProperty5 obj = (CustomProperty5)value;
return obj.Property1 + ";" + obj.Property2;
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
}
不难发现,其实就是通过LoadViewState和SaveViewState以及TrackViewState来进行沟通的。 注意这段代码, public void TrackViewState() { isTrackingViewState = true; ((IStateManager)viewState).TrackViewState();//重要 } 如果去掉加注释的那段,结果发现视图状态保存失败了,为什么呢?这就又要回归到StateBag的源代码上了,大家可以参考下我的ViewState——运用这篇拙作。 自定义类型的属性都是简单类型的问题解决了,但如果自定义类型的属性本身就是自定义类型呢。可能大家都要笑了,不错,递归处理一下就可以了呗。 在上面的例子中。可以发现复杂属性的set器都是被注释掉了的,为什么呢?我试过给控件的Font属性这样赋值:先new一个FontInfo的对象,然后将这个对象赋给控件的Font属性。结果失败了,因为我们根本就不能访问FontInfo的构造函数。而我们在平时使用的时候基本上都是通过obj.Font.Bold这种形式,而且这种方式也完全满足了我们的需求。但是我们自定义的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |