我正在尝试做一些与this question类似的事情。那里的答案建议从代码隐藏中进行数据绑定,但是我有很多项目我都应用这个,如果可能的话我宁愿不这样做。
我有一个用户控件。根据自定义控件上的属性值,将显示或隐藏许多图像。我已经尝试了几种使用<%: ... %>
语法实现此目的的不同方法,但由于我将在下面描述的原因,所有这些方法都失败了。
我的第一次尝试是在链接问题上执行类似OP的操作。从他的问题:
<select id="myDropDown"
style="width:60px;display:<%# (bool)Eval("ShowDropDown") ? "block" : "none" %>;">
我尝试了类似的东西,但是就像OP一样,它没有用值替换<%# (bool)Eval("ShowDropDown") ? "block" : "none" %>
- 它只是将其作为文字文本呈现。
我接下来试过的事情(我已尝试过几种变体,其中没有一种变得有效)如下:
<td id="tdR1Day1" style="vertical-align: top;" runat="server">
<div style="width: 100%; height: 15px">
<img title="Click to add pattern" <%: IsHidden ? "hidden = \"hidden\"" : "" %> align="right" id="imgR1Day1" style="cursor: pointer;" alt="Add" src="../Images/Add.gif">
</div>
</td>
但是,这导致The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>)
,因为我试图从后面的代码向div
标记动态添加td
。我没有直接修改img
本身,只是 td
。
当我在图像上执行完全相同的操作时,我不从代码隐藏中进行修改时,我得到以下HTML,它完全符合我的预期:
<td id="MainContent_scorpio_tdR1Day3" style="vertical-align: top;">
<div style="width: 100%; height: 15px">
<img hidden = "hidden" title="Click to add pattern" align="right" id="imgR1Day3" style="cursor: pointer;" alt="Add" src="../Images/Add.gif">
</div>
</td>
我的问题,然后:
<%: ... %>
?The Controls collection cannot be modified...
例外吗?或者,我是不是采取了错误的做法?例如,我是否应该尝试从代码隐藏中添加此div / image,就像我在div
中使用其他td
一样?
答案 0 :(得分:1)
有几个问题。 <%# ... %>
用于绑定到服务器控件的数据。您的<select>
不是服务器控件。使用<%= ... %>
用于显示表达式,只需调用一个函数。有关内联表达式的更多信息,请参阅here。
假设IsHidden
是一个布尔变量,你可以这样做:
<script runat="server">
protected string Display()
{
if (IsHidden) {
return "hidden";
}
return "show";
}
</script>
<select id="myDropDown" style='display:<%= Display %>'>
<option>
Test
</option>
</select>
我还建议只使用CSS类。所以更像是
<style>
.hidden {display:none;}
.show {display:block;}
</style>
<script runat="server">
protected string Display()
{
if (IsHidden) {
return "hidden";
}
return "show";
}
</script>
<select id="myDropDown" class="<%= Display %>">
<option>
Test
</option>
</select>
但是如果你想在后面的代码中修改你的表行,你应该确实使用数据绑定内联表达式,例如<%# ... %>
并且其余部分仍然如此。这将解决您的Controls collection
例外情况。