循环并在页面中添加下拉菜单项,而不是代码隐藏

本文关键字:菜单项 隐藏 代码 添加 循环 | 更新日期: 2023-09-27 18:19:21

我想知道是否可以在页面中添加下拉项而不是代码隐藏?

假设我有一个下拉框我想显示年份1900 ~当前年份

<asp:DropDownList ID="ddlYear" runat="server" CssClass="text">
    <% 
        int currentYear = DateTime.Now.Year;
        for (int i = 1900; i < currentYear; i++)
        {
    %>
        <asp:ListItem><%=i %></asp:ListItem>
    <%
        }
    %>
</asp:DropDownList>

有可能那样做吗?

因为当我尝试像上面那样做时它给了我:

警告1 C:'SandBox'MyWebApplication1'MyWebApplication1'Default.aspx:ASP。. NET运行时错误:代码块在此不受支持上下文。C: '沙箱' MyWebApplication1 ' MyWebApplication1 '违约。aspx 35 1 MyWebApplication1

编辑:我也试过了:

<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<% 
    int currentYear = DateTime.Now.Year;
    if (currentYear <= 1933)
    {
        currentYear = 2012;
    }
    for (int i = 1933; i < currentYear; i++)
    {
        DropDownList1.Items.Add(new ListItem(i.ToString(), i.ToString()));
    }
%>

但是下拉列表在显示时没有项

= = = = =编辑:正如Splash-X建议的那样,现在它呈现了,但所有项目都在回发后消失了....

<form id="form1" runat="server">
<div>
<% 
    int currentYear = DateTime.Now.Year;
    if (!Page.IsPostBack)
    {
        if (currentYear <= 1933)
        {
            currentYear = 2012;
        }
        DropDownList1.Items.Clear();
        for (int i = 1933; i < currentYear; i++)
        {
            DropDownList1.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }
    }
%>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>

    <input id="Button1" type="button" value="button" onclick="MyFunction();"/>
    <div id="MyDiv">
    </div>
    <asp:Button ID="Button2" runat="server" Text="Button" />
</div>
</form>

循环并在页面中添加下拉菜单项,而不是代码隐藏

我不这么认为。你可以在页面中有脚本块,而不是在后面的代码中,但它们的编码方式与后面的代码相同(即方法块,将下拉列表作为对象引用并调用add方法等),所以你在页面中做这些事情并没有真正获得任何东西。

我有一个用ASP编写的项目实例。NET 2.0,我们不再有源代码来做更改。我们需要修改下拉菜单中显示的状态。旧代码有US States和Canadian Provinces,我们只需要显示States。在后面的代码中,下拉菜单被绑定到数据源,所以我们清除这些项,然后添加所有的项。

<%
if(!IsPostBack)
{
    st.Items.Clear();
    st.Items.Add(new ListItem("State", "")); //Add an empty item at the top for default value        
    string usStates = "AA,AE,AK,AL,AP,AR,AS,AZ,CA,CO,CT,DC,DE,FL,FM,GA,GU,HI,IA,ID,IL,IN,KS,KY,LA,MA,MD,ME,MH,MI,MN,MO,MP,MS,MT,NC,ND,NE,NH,NJ,NM,NV,NY,OH,OK,OR,PA,PR,PW,RI,SC,SD,TN,TX,UT,VA,VI,VT,WA,WI,WV,WY";
    foreach (string state in usStates.Split(','))
    {
        st.Items.Add(new ListItem(state, state));
    }
}
%>
<select name="st" class="col" id="st" alt="select" runat="server">

不同之处在于我在控件之前做了修改,我必须这样做的原因是控件在渲染到页面后改变下拉菜单后的任何脚本。

尝试将代码移动到下拉列表上方。我们的代码检查是否有回发,这样我们就可以保留之前输入的任何值。没有必要在每次加载页面时都重新加载列表,只在第一个页面加载即可。