c# - 加载 ASP.NET DropDownList

标签 c# asp.net webforms

非常简单的问题...但奇怪的结果。 我只是想用 C# 填充下拉列表

protected void Page_Load(object sender, EventArgs e)
{
    if (!(Page.IsPostBack))
    {
        LoadDropDowns();            
    }
}

protected void LoadDropDowns()
{
    ddlVendor.DataSource = BL.GetAllVendors();
    ddlVendor.DataTextField = "VendorName";
    ddlVendor.DataValueField = "VendorName";
    ddlVendor.DataBind();
}

BL.GetAllVendors 只是一个执行此操作的静态类:

public static List<Vendor> GetAllVendors()
{
    return DL.GetAllVendors();     
}

而DL.GetAllVendors也是出建List的静态类(数据层):

public static List<Vendor> GetAllVendors()
{
    using(SqlConnection con = new SqlConnection(connString))
    {
        //use sproc
        SqlCommand cmd = new SqlCommand("selAllVendors", con);
        cmd.CommandType = CommandType.StoredProcedure;

        //temporary storage of list of vendors
        List<Vendor> lv = new List<Vendor>();

        con.Open();
        SqlDataReader reader = cmd.ExecuteReader();

        //continue as long as we have vendors
        while (reader.Read())
        {
            //instantiate a vendor
            Vendor v = new Vendor((string)reader["VendorName"]);
            //add them to the list
            lv.Add(v);
        }
        //clean the reader
        reader.Close();
        reader = null;

        //return that list
        return lv;
    }
}

供应商类很简单:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Vendor
/// </summary>
namespace TK.Objects
{
    public class Vendor
    {
        private string VendorName { get; set; }

        public Vendor(string vn)
        {
            VendorName = vn;
        }
    }
}

我知道我的存储过程是正确的,因为我进行了调试/观察,我看到它提取了两条记录“All”和“Microsoft”。

存储过程很简单:

CREATE PROCEDURE selAllVendors
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

      SELECT
        Vendor AS VendorName,
        1 as SortOrder
    FROM 
        Vendor
    UNION ALL
    SELECT
        'All' AS VendorName,
        0 as SortOrder
    ORDER BY 
        SortOrder,
        Vendor  
END
GO

但是当我运行这段代码时出现错误:

System.Web.HttpException was unhandled by user code
  Message=DataBinding: 'TK.Objects.Vendor' does not contain a property with the name 'VendorName'.
  Source=System.Web
  ErrorCode=-2147467259
  WebEventCode=0
  StackTrace:
       at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName)
       at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName, String format)
       at System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource)
       at System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e)
       at System.Web.UI.WebControls.ListControl.PerformSelect()
       at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
       at _Default.LoadDropDowns() in c:\Users\Documents\Visual Studio 2010\WebSites\T\Default.aspx.cs:line 26
       at _Default.Page_Load(Object sender, EventArgs e) in c:\Users\Documents\Visual Studio 2010\WebSites\T\Default.aspx.cs:line 17
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: 

我在这里错过了什么?

最佳答案

Vendor 类的 VendorName 属性必须是公共(public)的,而不是私有(private)的。

关于c# - 加载 ASP.NET DropDownList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119897/

相关文章:

C# - 如何在包含数组的结构中编码(marshal)非托管结构

c# - 编译 C++ .lib 文件使它们成为 C# 环境的 DLL

c# - WCF maxBytesPerRead 限制为 4096

c# - 获取 Azure 高级存储帐户属性

javascript - 如何知道是否在另一个页面上单击了按钮?

c# - 从 ASP.NET 日历控件的单元格触发事件

c# - 如何获取请求的默认文档?

javascript - 如何使用 ASP.NET WebForms 中的 JavaScript 将 FormView 中的 DropDownList 中的文本获取到 TextBox 中?

javascript - AngularJS 将数据发布到 ASP.NET WebForms

asp.net - 隐藏ASP.NET菜单项