【问题标题】:DropDownList OnSelectedIndexChanged is not FiringDropDownList OnSelectedIndexChanged 未触发
【发布时间】:2013-09-13 07:30:50
【问题描述】:

我的主要目的是根据 ddlMedicalName 选择填充 ddlCity DropDownList。但我的主要问题是,虽然我尝试了几乎所有解决该问题的方法,但我无法让它触发 ddlMedicalName_OnSelectedIndexChanged 。

我知道,关于这个问题有很多问题和答案,我已经尝试了每一个问题,但仍然不起作用。我已经读过 EnableStateView=True 不仅应该应用于 DropDownList 还应该应用于整个页面,所以我在 Web.Config 中添加了以下代码:

 <system.web>
<pages styleSheetTheme="MainTheme" enableViewState="true"/>

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;



namespace MedicalBootStrap
{

public partial class WebForm1 : System.Web.UI.Page
{
    Entity.medicaldbEntities context = new Entity.medicaldbEntities();

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            ddlBind();
        }

    }

    protected void ddlBind()
    {

        var orders = from order in context.Medicals

                     select new { order.MedicalID, order.medicalName, order.CityFK };

        var lstsrc = orders.ToList();

        ddlMedicalName.DataSource = lstsrc;
        ddlMedicalName.DataTextField = "medicalname";
        ddlMedicalName.DataValueField = "cityfk";

        ddlMedicalName.DataBind();

    }

    protected void ddlMedicalName_OnSelectedIndexChanged(object sender, EventArgs e)
    {

          int slc = Convert.ToInt32(ddlMedicalName.SelectedItem.Value);

        var orders = from order in context.Cities
                     where order.CityID == slc
                     select new { order.CityID, order.CityName};

        var lstsrc = orders.ToList();

        ddlMedicalName.DataSource = lstsrc;
        ddlMedicalName.DataTextField = "medicalname";
        ddlMedicalName.DataValueField = "cityfk";

        ddlMedicalName.DataBind();
    }

    protected void ddlRegion_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void SearchButton_Click(object sender, EventArgs e)
    {

    }   
 }
}

这里是aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="MedizinischeLeistungen.aspx.cs" Inherits="MedicalBootStrap.WebForm1" EnableViewState="true" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server" EnableViewState="true">
<table id="SearchTable">
<tr>
<td>Medizinische Leistung</td>
<td>Region</td>
<td>Stadt</td>
</tr>
<tr id="SearchDropDown">

<td>
    <asp:DropDownList ID="ddlMedicalName" runat="server" EnableViewState="true" 
        AutoPostBack="True"  AppendDataBoundItems="true"
    OnSelectedIndexChanged="ddlMedicalName_OnSelectedIndexChanged">
    <asp:ListItem Value="" Selected="True"> - Product - </asp:ListItem>
    </asp:DropDownList>
</td>

<td>
    <asp:DropDownList ID="ddlRegion" runat="server" AutoPostBack="true" EnableViewState="true"
onselectedindexchanged="ddlRegion_SelectedIndexChanged">
<asp:ListItem Value="" Selected="True"> - Product - </asp:ListItem>
    </asp:DropDownList>
</td>
<td>
    <asp:DropDownList ID="ddlCity" runat="server" AutoPostBack="true" EnableViewState="true"
onselectedindexchanged="ddlCity_SelectedIndexChanged">
<asp:ListItem Value="" Selected="True"> - Product - </asp:ListItem>
    </asp:DropDownList>
</td>
<td>
    <asp:Button ID="SearchButton" runat="server" Text="Suche" onclick="SearchButton_Click" />

</td>
</tr>
</table>




</asp:Content>

任何帮助将不胜感激

【问题讨论】:

  • 其他下拉菜单是否触发了该事件?
  • 您没有显示整个 aspx 页面,但您是否在顶部设置了 AutoEventWireup="true"
  • @RômuloSpier 我没试过,我试试看。
  • @Icarus 不,我正在添加它
  • @Icarus 啊抱歉,因为第一次听说,我以为它不见了,但它已经在那里并且设置为 true

标签: c# asp.net


【解决方案1】:

请按照我的建议更改并尝试。您必须删除以下行

ddlMedicalName.DataValueField = "cityfk";

将 cityfk 更改为 medicalname 并尝试。

ddlMedicalName.DataValueField = "medicalname";

【讨论】:

    【解决方案2】:

    我测试了您的代码。以下是我目前发现的 -

    ddlMedicalName_OnSelectedIndexChanged 事件被正确触发。

    ddlMedicalName.SelectedValue 是一个字符串值; 字符串不是 ddlCity.DataSource

    的有效数据源
    protected void ddlMedicalName_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        // Problem is the following 3 line of codes.
        ddlCity.DataSource = ddlMedicalName.SelectedValue; 
        ddlCity.DataTextField = ddlMedicalName.SelectedValue;
        ddlCity.DataValueField = ddlMedicalName.SelectedValue;
    
        ddlCity.DataBind();
    }
    

    更新:

    这是我的测试方式 -

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ddlBind();
        }
    }
    
    public class Medical
    {
        public int MedicalID { get; set; }
        public string MedicalName { get; set; }
        public int CityFK { get; set; }
    }
    
    public class City
    {
        public int CityID { get; set; }
        public string CityName { get; set; }
    }
    
    protected void ddlBind()
    {
        var medicals = new List<Medical>()
        {
            new Medical {MedicalID = 1, MedicalName = "One", CityFK = 11},
            new Medical {MedicalID = 2, MedicalName = "Two", CityFK = 22},
            new Medical {MedicalID = 3, MedicalName = "Three", CityFK = 33},
            new Medical {MedicalID = 4, MedicalName = "Four", CityFK = 44},
        };
    
        ddlMedicalName.DataSource = medicals;
        ddlMedicalName.DataTextField = "medicalname";
        ddlMedicalName.DataValueField = "cityfk";
    
        ddlMedicalName.DataBind();
    
    }
    
    protected void ddlMedicalName_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        var cities = new List<City>()
        {
            new City {CityID = 11, CityName = "City One"},
            new City {CityID = 22, CityName = "City Two"},
            new City {CityID = 33, CityName = "City Three"},
            new City {CityID = 44, CityName = "City Four"},
        };
    
        int slc = Convert.ToInt32(ddlMedicalName.SelectedItem.Value);
    
        var orders = from order in cities
                        where order.CityID == slc
                        select new { order.CityID, order.CityName };
    
        var lstsrc = orders.ToList();
    
        ddlCity.DataSource = lstsrc;
        ddlCity.DataTextField = "CityName";
        ddlCity.DataValueField = "CityID";
    
        ddlCity.DataBind();
    }
    
    protected void ddlRegion_SelectedIndexChanged(object sender, EventArgs e)
    {
    
    }
    
    protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
    {
    
    }
    
    protected void SearchButton_Click(object sender, EventArgs e)
    {
    
    }
    

    【讨论】:

    • 是的,你是对的,我已经更新了问题的那部分,但仍然没有触发
    • 对不起还是字符串,我应该选择哪种数据类型?可查询?顺便说一句,我在 ddlMedicalName_OnSelectedIndexChanged 中设置了断点,但它没有被命中,这不是说,它根本没有被触发吗?
    • ddlMedicalName_OnSelectedIndexChanged 事件每次都会触发。 把 enableViewState="true" 去掉,因为没必要。不知道你的项目改了什么,所以新建一个项目,测试一下更新后的代码。也看看ddlMedicalName_OnSelectedIndexChanged事件里面的代码。
    • 是的(我不知道为什么,但他们拒绝了更改,因为编辑的部分太小了),我正在尝试你的代码,最好确保它被解雇,谢谢你的帮助,我会告诉你的
    【解决方案3】:

    变化:

    protected void ddlMedicalName_OnSelectedIndexChanged(object sender, EventArgs e)
    {
    

    到:

    protected void ddlMedicalName_SelectedIndexChanged(object sender, EventArgs e)
    {
    

    或相反:

    <asp:DropDownList ID="ddlCity" runat="server" AutoPostBack="true" EnableViewState="true" onselectedindexchanged="ddlCity_SelectedIndexChanged">
    

    到:

    <asp:DropDownList ID="ddlCity" runat="server" AutoPostBack="true"  EnableViewState="true" onselectedindexchanged="ddlCity_OnSelectedIndexChanged">
    

    您当前指向名为“..._SelectedIndexChanged”的句柄并提供“..._OnSelectedIndexChanged”。

    【讨论】:

    • -1 - 这没关系,您可以随意命名方法,只要名称与标记中的 OnSelectedIndexChanged 属性中的名称匹配即可。您误读了这一点,OP 发布了代码 OnSelectedIndexChanged="ddlMedicalName_OnSelectedIndexChanged",OP 已正确完成。
    • 如果实际方法被称为ddlMedicalName_OnSelectedIndexChanged,那为什么会起作用?
    • 它指向 '..._SelectedIndexChanged'不存在!
    • 您对 ddlCity 和 ddlRegion 的看法是正确的,但 ddlMedicalName 是正确的。
    猜你喜欢
    • 2014-02-20
    • 2016-05-24
    • 1970-01-01
    • 2011-08-17
    • 2016-09-05
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多