欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.NET效率陷阱之——Attributes】,下面是详细的分享!
ASP.NET效率陷阱之——Attributes
众所周知,在编写WebCustomControl时,继承于WebControl基类的Attributes以及其Attributes.CssStyle属性是十分常用和重要的。但就是这两个重要的属性,如果开发中使用不当却会带来莫名其妙的效率问题。
由于html的灵活性和不完备性,导致了WebControl基类没有完整的表现html元素所提供和支持的所有标签属性和CSS属性(当然由于不同browser的兼容问题,要提供完备的属性是不可能的)。又由于很多html标签属性和CSS属性都是很生僻的,很少或极少被使用,如果要完备的支持,反而会成为WebControl的负担。所以Attributes和Attributes.CssStyle这两个属性很好的解决了这个问题,当然这两个属性除了支持应有的html标签属性和CSS属性外,还支持任何合法的自定义key/value对。这里要讨论的问题就来之这个对自定义key/value对的支持上。
Attributes属性的类型是一个AttributeCollection,本来很自然的一个东西,可是不知道怎么搞得,AttributeCollection的构造函数却需要一个StateBag参数:
{
this._bag=bag;
}
这样的结果就是,Attributes和Attributes.CssStyle可能会被保存在ViewState中,事实上ASP.NET默认确实会保存其中的内容到ViewState中。
这种设计真的是让人觉得莫名其妙,在大家对ViewState效率问题的讨论中,觉得ViewState确实是鸡肋,用来保持一些服务器状态和数据让大家觉得方便也就算了。可是居然把和UI相关的内容都一股脑存到ViewState里,真的是疯狂。
// AnalysisReport自定义控件上定义了一些自定的内容

修改代码:
protected override void OnPreRender(EventArgs e)
{
this.Attributes["abc"]="123";
this.Attributes.CssStyle["abc-style"]="123-style";
base.OnPreRender(e);
}
为如下形式:
protected override void Render(HtmlTextWriter output)
{
this.Attributes["abc"]="123";
this.Attributes.CssStyle["abc-style"]="123-style";
output.Write(Text);
}
就不会再将Attributes和Attributes.CssStyle保存到ViewState中了,上面那个AnalysisReport按上面的示例修改后,绑定同样数据的运行效果为:


以上所分享的是关于ASP.NET效率陷阱之——Attributes,下面是编辑为你推荐的有价值的用户互动:
相关问题:作业内容: 2、 什么是客户满意陷阱?有什么对策?...
答:作业内容: 2、 什么是客户满意陷阱?有什么对策?查阅网络相关资料给出一个案例。 3、简述客户智能及其实现过程。 5、现在你来为超市开发一套CRM,请写一份需求分析说明书 解 2: (1)客户满意陷阱: 客户满意陷阱不是客户的满意度高而忠... >>详细
相关问题:asp.net 中的Attributes 属性
答:很简单 属性就相当于人的特征 比如控件的name就相当于人的名字 id就相当于你的省份证号码等等 然后别人就可以通过你的特征找到你 控件也一样 >>详细
相关问题:asp.net Attributes.Add失效问题
答:Label1要使用客服端ID~~ Button2.Attributes.Add("onclick", 'document.getElementById("Label1.ClientID").style.display="none" '); 也许是单引号与双引号的区别~~不型的话试试这个: Button2.Attributes.Add("click", 'document.getElementBy... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
