1

我有一个在循环中动态创建的复选框列表,当我尝试使用内联代码设置值时,它只是给我内联代码而不评估它。这是一个例子:

<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="&lt;%= testValue %>" />
</li>

<li>
    <input name="ctl00$MainContent$ctl00" type="checkbox" value="&lt;%= testValue %>" />
</li>

<li>
     <input name="ctl00$MainContent$ctl00" type="checkbox" value="&lt;%= testValue %>" />
</li>

<li>
      <input name="ctl00$MainContent$ctl00" type="checkbox" value="&lt;%= testValue %>" />
</li>

<li>
      <input name="ctl00$MainContent$ctl00" type="checkbox" value="&lt;%= testValue %>" />
</li>
</ul>

有人可以帮我吗?

4

3 回答 3

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 帮助减少拼写错误并在编译时与运行时发现更多问题。

于 2013-10-16T03:10:12.643 回答
-1

[答案已编辑]尝试如下设置 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>
于 2013-10-16T02:57:45.167 回答
-1

你不能这样做,它看起来像 PHP 风格。如果您使用的是 ASP.Net,那么您应该完全改变您的代码风格

于 2013-10-16T03:11:53.500 回答