从后面的代码生成DropDownList

时间:2009-06-15 05:21:12

标签: c# asp.net

您好我在我的代码隐藏文件

中生成一个DropDownList
    protected DropDownList CountryList() 
    {
        DropDownList ddl = new DropDownList();

        XDocument xmlDoc = XDocument.Load(Server.MapPath("Countries.xml"));
        var countries = from country in xmlDoc.Descendants("Country")
                        select new
                        {
                          Name = country.Element("name").Value,                              
                        };

        foreach (var c in countries)
        {
            ddl.Items.Add(c.Name);                
        }
        return ddl;
    }

我曾经梦想过<%= CountryList()%>在我的aspx页面上。但是当我这样做时,它会输出字符串 - “System.Web.UI.WebControls.DropDownList”。

我可以这样做,或者我必须设置ContentPlaceHolder,然后将DropDownList添加到内容中吗?

干杯

4 个答案:

答案 0 :(得分:3)

<%= %>只是Response.Write方法的简写,您应该add the controls programatically

或者只是在您想要的地方添加一个asp:DropDownList标记,然后在后面的代码中,您可以使用DataSource属性和DataBind()方法将数据直接从Linq绑定到XML查询。 p>

例如:

在您的.aspx文件中:

<asp:DropDownList ID="CountryListDropDown" runat="server">
</asp:DropDownList>

在代码隐藏的Page_Load:

CountryListDropDown.DataSource = countries; // your query
CountryListDropDown.DataBind();

由于您的查询只有一个选定字段,因此您不必指定DataValueField和DataTextField值。

答案 1 :(得分:2)

DropDownList ddl = new DropDownList();
ddl.ID = "test";
form1.Controls.Add(ddl); //your formID

答案 2 :(得分:1)

ASP.NET页面预处理<%=...%>标记表示<% Response.Write(...) %> 因此你的方法不会起作用,你需要一个ContentPlaceHolder,Panel,PlaceHolder或其他命名容器来将DropDownList添加到。

此外,如果您希望页面回发等也能正常运行,您将需要在Page Init事件上创建(并可能填充)DDL并为其提供ID,否则您可能最终会出现视图状态不一致的情况。

答案 3 :(得分:1)

在aspx页面中像普通的一样声明DropDownList,然后在Page_Load()或你正在进行数据绑定的任何地方添加项目。