ASP.NET和C#代码中的常量

Bri*_*ian 8 c# asp.net

我有一个.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)

理想情况下,我想删除两个字符串并将值保存在一个公共常量中,有没有办法做到这一点?

Joh*_*ers 2

抱歉,不,没有办法完全按照您的意愿去做。您仍然会遇到该字符串两次:

<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)

您不能使用字符串表达式来创建类成员的名称。