2013-03-12 108 views
0

在ASP.net表單上,我有一個按鈕和一個下拉列表。 Dropdownlist通過LinqDatasource進行填充。單擊按鈕獲取下拉列表選定的值

我試圖在點擊一個按鈕時獲得所選的dropdownlist值。

下拉列表從Northwind db的employees表中獲取lastname的列表。

後面的代碼是這樣的,其獲取DDL值作爲空

aspx頁面

<%@ 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!

+0

你是什麼數據綁定到你的DDL?刪除該行,你的代碼可能會工作。 – 2013-03-12 19:49:46

+0

刪除了ddl.DataBind()行,但仍然出現相同的錯誤!謝謝 – user219628 2013-03-12 20:03:51

+0

有沒有什麼數據綁定到你的ddl在你的回發? – 2013-03-12 20:05:21

回答

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*/ 
} 
0

原因是您的下拉列表不是立即在Page控件下。該表單屬於Page控件。而你的下拉菜單將在形式控制下。

結果

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

查找名爲 「nameofDropdownlist」 直屬ASPX根DDL。但它在表單標籤內。

最好將ddl包裝在PlaceHolder中,並在PlaceHolder ID上使用FindControl。

相關問題