You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET如何在服务器端向下拉列表添加选项

问题解答

可以通过服务器端拼接<option>标签的方式添加下拉选项,但你的代码存在逻辑错误,且这种方式并非ASP.NET WebForms服务器控件的常规用法。以下是具体分析和解决方案:

原代码的核心问题

  1. 字符串拼接逻辑错误:选中项的分支使用了vnlst = "<option..."赋值操作,而非追加(+=),会覆盖之前拼接的内容,最终仅保留选中项或最后一个选项。
  2. DataSource用法错误:DropDownList的DataSource需要接收集合类型(如List<string>、数组),而非HTML字符串,直接绑定HTML会导致控件无法正确解析渲染。

推荐解决方案:使用服务器控件标准方式

这是WebForms的常规做法,直接操作DropDownList的Items集合或使用数据绑定,更安全且易维护。

方式1:直接添加ListItem

List<string> vendorname_list = (List<string>)Session["vendornamelist"];
if (vendorname_list != null && vendorname_list.Count > 0)
{
    ddlvendornames.Items.Clear();
    foreach (var vendor in vendorname_list)
    {
        ListItem item = new ListItem(vendor, vendor);
        // 设置选中状态
        if (Session["vendornameselect"] != null && Session["vendornameselect"].ToString() == vendor)
        {
            item.Selected = true;
        }
        ddlvendornames.Items.Add(item);
    }
}

方式2:数据绑定+设置选中值

List<string> vendorname_list = (List<string>)Session["vendornamelist"];
if (vendorname_list != null && vendorname_list.Count > 0)
{
    ddlvendornames.Items.Clear();
    ddlvendornames.DataSource = vendorname_list;
    ddlvendornames.DataBind();
    
    // 绑定后设置选中项
    if (Session["vendornameselect"] != null)
    {
        string selectedVendor = Session["vendornameselect"].ToString();
        if (ddlvendornames.Items.FindByValue(selectedVendor) != null)
        {
            ddlvendornames.SelectedValue = selectedVendor;
        }
    }
}

若坚持使用HTML拼接方式(不推荐)

需替换DropDownList为HtmlSelect服务器控件(允许直接设置HTML内容),同时注意字符转义避免语法错误和安全风险:

前台页面

<select id="ddlvendornames" runat="server"></select>

后台代码

List<string> vendorname_list = (List<string>)Session["vendornamelist"];
if (vendorname_list != null && vendorname_list.Count > 0)
{
    StringBuilder sb = new StringBuilder();
    foreach (var vendor in vendorname_list)
    {
        string selectedAttr = "";
        if (Session["vendornameselect"] != null && Session["vendornameselect"].ToString() == vendor)
        {
            selectedAttr = " selected='selected'";
        }
        // 转义特殊字符,防止HTML语法错误和XSS
        string safeVendor = HttpUtility.HtmlEncode(vendor);
        sb.AppendFormat("<option value='{0}'{1}>{0}</option>", safeVendor, selectedAttr);
    }
    ddlvendornames.InnerHtml = sb.ToString();
}

内容的提问来源于stack exchange,提问作者ashok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:53:14