2009-07-28 59 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

相關問題