我有一个在循环中动态创建的复选框列表,当我尝试使用内联代码设置值时,它只是给我内联代码而不进行评估。这是一个例子:
<ul>
<%
string testValue = string.Empty;
for(int index = 0; index < 5; index++)
{
testValue = "blah" + index;
%>
<li>
<input type="checkbox" runat="server" value="<%= testValue %>" />
</li>
<%
}
%>
</ul>
这是我得到的输出:
<ul>
<li>
<input name="ctl00$MainContent$ctl00" type="checkbox" value="<%= testValue %>" />
</li>
<li>
<input name="ctl00$MainContent$ctl00" type="checkbox" value="<%= testValue %>" />
</li>
<li>
<input name="ctl00$MainContent$ctl00" type="checkbox" value="<%= testValue %>" />
</li>
<li>
<input name="ctl00$MainContent$ctl00" type="checkbox" value="<%= testValue %>" />
</li>
<li>
<input name="ctl00$MainContent$ctl00" type="checkbox" value="<%= testValue %>" />
</li>
</ul>
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
由于您已经使用runat="server"
,我建议您只使用服务器端控件来管理动态内容,例如:
<ul>
<asp:Repeater ID="Repeater1" runat="server"
OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<li>
<asp:CheckBox id="check1" runat="server" />
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
现在绑定转发器(OnItemDataBound
)时,您可以访问复选框的.Text
属性,如下所示:
protected void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
// This event is raised for the header, the footer, separators, and items.
// Execute the following logic for Items and Alternating Items.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
CheckBox theCheckBox = e.Item.FindControl("check1") as CheckBox;
// Make sure we found the check box before we try to use it
if(theCheckBox != null)
{
theCheckBox.Text = "Your Text Value Here";
}
}
}
注意:使用代码隐藏可以让您更轻松地利用Visual Studio调试器的强大功能,并使用IntelliSense帮助减少拼写错误,并在编译时捕获更多问题,而不是运行时。
答案 1 :(得分:-1)
[回答编辑]尝试使用“&amp;”设置testValue,如下所示和“.ToString()”用于字符串连接:
<ul>
<%
string testValue = string.Empty;
for(int index = 0; index < 5; index++)
{
testValue = "blah" & index.ToString();
%>
<li>
<input type="checkbox" runat="server" value="<%=testValue %>" />
</li>
<%
}
%>
</ul>
答案 2 :(得分:-1)
你不能这样做,它看起来像PHP风格。如果您使用的是ASP.Net,那么您应该完全改变您的代码风格