我有一个.aspx页面,它在表格中创建一列复选框,使用ID来命名
<asp:TemplateField HeaderText="Select"> <ItemTemplate> <asp:CheckBox ID="testCheck" runat="server" AutoPostBack="true" /> </ItemTemplate> </asp:TemplateField>
CheckBox chk = (CheckBox)gridRow.FindControl("testCheck");
理想情况下,我想删除两个字符串并将值保存在一个公共常量中,有没有办法做到这一点?
解决方法
对不起,不,没有办法完全按照自己的意愿行事.你仍然会发现两次出现的字符串:
<asp:CheckBox ID="testCheck" runat="server" AutoPostBack="true" />
和
public const string TestCheckName = "testCheck";
后来
CheckBox chk = (CheckBox)gridRow.FindControl(TestCheckName );
请注意,问题不在于ASP.NET标记语法那么多常量.你可以这样做:
<asp:CheckBox ID="<%= TestCheckName %>" runat="server" AutoPostBack="true" />
但这似乎有点傻.
好吧,这根本不起作用,这就是原因:
在CheckBox的声明中,testCheck不仅仅是一个字符串.如果是字符串,那么<%#%>数据绑定的语法可行.在DataBinding事件期间,该属性将设置为该字符串值.
但是,ID属性不仅仅是一个字符串属性 – 它是设计器和页面解析器用于创建具有该名称的字段的内容.因此,必须将其设置为常量值.
类比将是这样的代码:
protected CheckBox testCheck;
您不能使用字符串表达式来创建类成员的名称.