ASPX页面能否将数据绑定值用作控件ID?求正确实现方法
可以实现!但你得换个正确的姿势
首先直接给结论:能用数据绑定值给ASPX控件命名ID,但你当前的写法行不通——原因是ASP.NET控件的ID属性是在页面解析阶段就需要确定的,而<%# %>这种数据绑定表达式是在数据绑定阶段才执行的,时机晚了一步,所以标记里直接绑定ID会失效。
正确的实现方式
因为你的代码里用到了Container.DataItem,说明这个HiddenField应该是在Repeater、GridView这类数据绑定控件里的,那我们可以通过控件的DataBinding事件来动态设置ID,步骤如下:
- 修改ASPX标记:去掉ID的绑定表达式,添加
OnDataBinding事件关联
<asp:HiddenField runat="server" OnDataBinding="hdItem_DataBinding" />
- 后台代码添加事件处理
根据你用的语言选对应的代码:
C# 版本
protected void hdItem_DataBinding(object sender, EventArgs e) { // 获取当前触发事件的HiddenField控件 HiddenField currentHd = (HiddenField)sender; // 从当前数据项里取IDNum的值 string idNum = DataBinder.Eval(currentHd.NamingContainer.DataItem, "IDNum").ToString(); // 动态设置控件ID currentHd.ID = "hd" + idNum; // 如果你需要把IDNum也存到HiddenField的Value里,可以顺便加这行 currentHd.Value = idNum; }
VB.NET 版本
Protected Sub hdItem_DataBinding(ByVal sender As Object, ByVal e As EventArgs) Dim currentHd As HiddenField = DirectCast(sender, HiddenField) Dim idNum As String = DataBinder.Eval(currentHd.NamingContainer.DataItem, "IDNum").ToString() currentHd.ID = "hd" & idNum currentHd.Value = idNum End Sub
关键注意点
- ID唯一性:要保证你绑定的
IDNum值是唯一的,不然会出现控件ID重复的问题,ASP.NET会直接报错。 - 不要在标记里写固定ID:如果标记里已经写了
id="xxx",那动态设置的ID会被覆盖,所以标记里要么留空,要么写个临时的(比如id="tempHd"),然后在事件里替换掉。
这样就能完美实现用数据绑定值给控件命名ID的需求啦!
内容的提问来源于stack exchange,提问作者user819774
相关产品推荐
相关产品推荐

