2009-07-28 74 views
0

我有一些ASP,我想看起来有点像这样:如何使用数据绑定设置ASP的ID:CheckBox控件

<asp:DataGrid ID="dgEnum" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateColumn> 
      <ItemTemplate> 
       <asp:CheckBox ID="<%# some big DataBinder expression %>" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid> 

但是这给了我一个:

解析器错误消息:控件的ID属性只能使用标记中的ID属性和一个简单值来设置。例如:<asp:Button runat="server" id="Button1" />

任何人都有一个想法如何破解呢?

回答

0

不知道你是打算在这里做什么,但你可以直接进入HTML控件即<input type="checkbox" id="<%# some expresssion %>" />

或者你不这样做,查询其在服务器端。即找到您想要的行,然后使用FindControls()获取该行的复选框。

+0

结果是我需要在ID标记中存储信息。看到这个:http://stackoverflow.com/questions/1180443/how-to-programmatically-create-and-use-a-list-of-checkboxes-from-asp-net – BCS 2009-07-28 00:55:59

2

任何人都有一个想法如何破解?

你不能,而你不。您可以将所需数据存储在ID以外的某个位置。至少,可以使用兄弟HiddenField

<script runat="server"> 
    void Checkbox_CheckedChanged(object sender, EventArgs e) { 
     var c = (Checkbox)sender; 
     if (!c.Checked) { 
      return; 
     } 
     var hfv = (HiddenField)c.Parent.FindControl("hfvMyData"); 
     var myData = hfv.Value; 
     /* Do something with myData */ 
    } 
</script> 

<asp:DataGrid ID="dgEnum" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateColumn> 
      <ItemTemplate> 
       <asp:CheckBox runat="server" OnCheckedChanged="Checkbox_CheckedChanged" /> 
       <asp:HiddenField id="hfvMyData" runat="server" Value='<%# Eval("MyData") %>' /> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid>  

其他选项可能是DataKeys,服务器端(也许缓存或会话数据)索引列表,或ViewState的索引列表。

如果你真的想要混蛋WebForms,你可以把你的数据放入CssClass中......但这太疯狂了。 ;)

+0

这可能是正确的方法来做到这一点。不幸的是,我宁愿怀疑我的用例会把它弄糊涂,因为`c.Parent.FindControl`不会工作,直到我重建表单,我需要在重建它之前使用复选框数据。 - OTOH我可能能够使用一些客户端JS玩隐藏的领域... – BCS 2009-07-28 16:14:35

相关问题