0

在 ASP.net 表单上,我有一个按钮和一个下拉列表。Dropdownlist 通过 LinqDatasource 填充。

我试图在单击按钮时获取选定的下拉列表值。

下拉列表从 Northwind db 的员工表中获取姓氏列表。

后面的代码是这样的,它将 ddl 值设为 null

页面

 <%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %>
<form id="form1" runat="server">
<asp:DropDownList ID="Ddl_allGoldsets" runat="server" 
    DataSourceID="LinqDataSource1" DataTextField="LastName" 
    DataValueField="LastName">
</asp:DropDownList>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="Demo.linqDataContext" EntityTypeName="" GroupBy="LastName" 
    OrderGroupsBy="key" Select="new (key as LastName, it as Employees)" 
    TableName="Employees">
</asp:LinqDataSource>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</form>

代码隐藏

namespace Demo
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            linqDataContext dc = new linqDataContext();
            DropDownList ddl = (DropDownList)Page.FindControl("Ddl_allGoldsets");
            string val = ddl.SelectedValue;

            /* code that writes val into db*/
        }
    }
}

上面的代码返回空值到ddl!!

4

2 回答 2

1

你根本不需要使用FindControl。您应该能够Ddl_allGoldsets直接从代码隐藏中引用:

protected void Button1_Click(object sender, EventArgs e)
{
    DropDownList ddl = Ddl_allGoldsets;
    string val = ddl.SelectedValue;

    /* code that writes val into db*/
}
于 2013-03-13T21:02:19.907 回答
0

原因是您的下拉菜单不在 Page 控制之下。该窗体属于 Page 控件。您的下拉菜单将在表单控件下。

因此

DropDownList ddl = (DropDownList)Page.FindControl("nameofDropdownlist");

直接在 aspx 的根目录下查找名为“nameofDropdownlist”的 ddl。但它在表单标签内。

最好将 ddl 包装在 PlaceHolder 中并在 PlaceHolder Id 上使用 FindControl。

于 2013-03-12T20:29:29.703 回答