我有一些ASP,我想看起来有点像这样:
<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 :(得分: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中......但这太疯狂了。 ;)
答案 1 :(得分:0)
不确定你打算在这里做什么,但你可以直接进入html控件,即<input type="checkbox" id="<%# some expresssion %>" />
或者你不这样做并在服务器端查询它。即找到您想要的行,然后使用FindControls()
获取该行的复选框。