在ASP.net表单上,我有一个按钮和一个Dropdownlist。 Dropdownlist通过LinqDatasource填充。
我试图在点击按钮时获得所选的下拉列表值。
dropdownlist从Northwind db。的employees表中获取lastname列表。
后面的代码就是这样,它将ddl值变为null
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 :(得分: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*/
}
答案 1 :(得分:0)
原因是您的下拉列表不会立即在Page控件下。该表单属于Page控件。您的下拉菜单将受到表格控制。
结果
DropDownList ddl = (DropDownList)Page.FindControl("nameofDropdownlist");
直接在aspx的根目录下查找名为“nameofDropdownlist”的ddl。但它在表格标签内。
最好将ddl包装在PlaceHolder中,并在PlaceHolder Id上使用FindControl。