0

ASP.net フォームには、ボタンとドロップダウン リストがあります。ドロップダウン リストは、LinqDatasource を通じて設定されます。

ボタンをクリックすると、選択したドロップダウンリストの値を取得しようとしています。

ドロップダウン リストは、ノースウィンド データベースの従業員テーブルから姓のリストを取得します。

コードビハインドはこのようなもので、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*/
        }
    }
}

上記のコードは null 値を ddl に返します!!

4

2 に答える 2

0

その理由は、ドロップダウンがページコントロールのすぐ下にないためです。フォームはページ管理下にあります。また、ドロップダウンはフォームの制御下にあります。

結果として

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

aspxのルートのすぐ下にある「nameofDropdownlist」という名前のddlを探します。しかし、それはフォームタグの中にあります。

ddlをPlaceHolder内にラップし、PlaceHolderIDでFindControlを使用することをお勧めします。

于 2013-03-12T20:29:29.703 に答える