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