构建下拉选择形式:在此上下文中不支持代码块

时间:2011-09-18 19:02:40

标签: asp.net forms loops drop-down-menu

我正在尝试做一些我认为很简单的事情[能够以这种方式在PHP中执行]但是aspx正在抱怨...代码应该构建一个下拉菜单,其中包含从x到y的数字,我将其写为:

<asp:DropDownList runat="server" ID='DOBD'><asp:ListItem value=''>---</asp:ListItem>
<% for (int i = 1;i<32;i++) { %>
<asp:ListItem value='<%= i %>'><%= i %></asp:ListItem>
<% } %>
</asp:DropDownList>

我收到代码块错误,不知道该怎么做。 提前谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

在codebehind类中添加项目。您可以使用控件的id访问任何控件:

this.DOBD.Items.Add(new ListItem("----"));
for (int i = 1; i < 32; i++)
{
    this.DOBD.Items.Add(new ListItem(i.ToString()));
}

另外,您可以离开<asp:ListItem value=''>---</asp:ListItem>,但在这种情况下,您需要将AppendDataBoundItems设置为true

<asp:DropDownList ID="DOBD" runat="server" AppendDataBoundItems="true"></asp:DropDownList>

此外,没有代码隐藏类的解决方案:

<%
    for (int i = 1; i < 32; i++)
    {
        this.DOBD.Items.Add(new ListItem(i.ToString()));
    }
%>
<asp:DropDownList ID="DOBD" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Text="---"></asp:ListItem>
</asp:DropDownList>

答案 1 :(得分:1)

作为Samich's answer的替代方案,您可以使用DataSource填充下拉列表:

<asp:DropDownList runat="server" ID='DOBD' 
     DataSource='<%# System.Linq.Enumerable.Range(1, 32) %>'>
</asp:DropDownList>

<script runat="server"> 
  protected void Page_Load(object sender, EventArgs e)
  { 
     if(! IsPostback) {
        DOBD.DataBind();
     }
  }
</script>

或ObjectDataSource