我从一个早已离去的人那里继承了一些疯狂的代码。他实现了一个自定义控件来实现大量松散相关的查询。
该控件有一堆不同的面板,都设置为 Visible='false' 以反映不同的过滤器输入集。然后有一个用于结果的 GridView。GridView 具有<asp:TemplateFields Visible='false'>
从他想要运行的所有不同查询返回的所有可能列的超集。
控件的代码隐藏在初始化时运行,为过滤器面板和当前想要的特定查询的列翻转 Visible='true'。
更疯狂的是,我只是注意到<asp:TemplateField Visible="false">
没有阻止 <ItemTemplate> 内部的构建,所以他的控制正在做各种永远不会被看到的额外工作。
举一个例子:
<asp:TemplateField HeaderText="Expiration Date" SortExpression="ExpirationDate" Visible="false"><br />
<itemtemplate><br />
<asp:HyperLink runat="server" ID="FormLink" Target="_blank" NavigateURL="<%# CreateFormLink() %>" Text='<%# DateUtil.getFormattedDate(Eval("ExpireDate")) %>' ><br />
</asp:HyperLink><br />
</itemtemplate><br />
</asp:TemplateField><br />
CreateFormLink()
即使 Visible 为假,代码隐藏方法也会被调用...
它之前没有爆炸的唯一原因是该方法使用 StringBuilder 将 href 拼凑在一起,并且StringBuilder.Append(Eval("foo"))
不会爆炸。
我尝试用串联替换 StringBuilder 的使用,以提高内存效率,并在列不在当前结果集中时获得了繁荣。
由于Visible='false'
没有停止工作的完成(即使它停止了显示),有没有更规范的方法来做到这一点?还是我应该重新开始?