为什么我需要在ASP.NET控件上调用处理?
我在VS中进行一些ASP.NET开发,刚刚发现一个有趣的小代码建议(我认为他们来自coderush,但我可能是错的).
每当我创建控件,它告诉我,我应该为他们使用一个“使用”语句.对于这里发生的事情我有点困惑.使用我的代码看起来像: using (HtmlTableRow tableRow = new HtmlTableRow()) { tableRow.Attributes.Add("class",isOddRow ? "OddRow" : "EvenRow"); listingTable.Rows.Add(tableRow); addCell(tableRow,row,"issueId"); addCell(tableRow,"Title"); addCell(tableRow,"Type"); addCell(tableRow,"Summary"); } 所以我期待在使用语句的结尾,它将在tableRow上调用处理.但是,MSDN库中的文档说:
所以我希望我现在有一个不可用的对象在我的控制结构中,所以它会破坏或不渲染或某事.但是,一切似乎都很好. 所以我想知道的是为什么所有的控制一次性?是仅仅因为其中一些将会使其全部一次性意味着一个在顶层处理的调用可以被递归传递给所有的子控件? 我想我会理解,如果不是因为这个文件明确地说,处理一个控制使它无法使用…文档是错误的? 解决方法
你不应该这样做.您需要做的是确保listTable位于“控件”集合中,以便在页面处理时将其进行处理.然后,列表表对象负责正确处理其所有子项.
为什么所有的Control对象都实现了IDisposable接口.这样每个父控件都可以调用Dispose对所有的孩子,而无需首先对每个孩子进行测试/转换.每个控件单独负责确定在调用Dispose方法时是否确实有任何需要清除的内容. 文件没有错.在处理过程中实现IDisposable并具有实际清理的状态数据的任何正确写入的对象都应抛出ObjectDisposedException,如果在处理完任何其公共/受保护/内部属性或方法后被访问. (假设Dispose已被调用后的无效状态)有些类型将忽略此规则,如果实际上没有任何要清理的内容,并且不必担心无效状态. 你得到一个建议将其包装在一个使用块的原因是因为分析器没有意识到,listTable将处理其Rows集合,它将处理已添加到其中的每个行对象.另外,如果HtmlTableRow tableRow = new HtmlTableRow()和listingTable.Rows.Add(tableRow)之间抛出异常,则HtmlTableRow对象将被“孤立”,而不在任何其他对象的IDisposable层次结构中.代码分析希望您使用try / finally块立即处理HtmlTableRow(如果发生这种情况). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – Package Console Manager中的“dnvm”命令
- asp.net – 使用Web Api,SignalR,MVC和OWIN的Ninject
- asp.net-mvc – 在asp.net mvc中使用IDataErrorInfo
- asp.net – 我可以在docker容器中运行IIS上托管的dotnet应用
- asp.net-mvc-3 – 实体框架,MVC 3,LINQ To Entities中的Ord
- ASP.NET 4 URL路由Web表单打破了我对样式,脚本,图像等的相对
- asp.net-mvc-3 – 是否有自动方式在MVC中查找未使用的视图?
- asp.net 4.5脚本捆绑也没有bundeling也没有缩小
- asp.net 文章分页显示实现代码
- 在ASP.NET 4 ReportViewer中使用对象数据源
- environment-variables – 如何在生产环境中设置
- ASP.net没有为某些用户代理生成javascript
- asp.net-mvc – MVC 3 RC中的Razor Helper
- asp.net-mvc – 如何在编辑器模板中确定模型数组
- asp.net – 从表单身份验证转换为Windows身份验证
- 覆盖ASP.NET WebMethod参数的DateTime序列化
- asp.net-mvc-4 – MVC 4 – Web Api和JSON?
- asp.net-mvc – 流畅的验证自定义验证规则
- asp.net-mvc – 我可以在asp.net mvc中结束视图的
- asp.net-mvc-4 – 使用RabbitMQ从ASP.net MVC 4消