c# - 使用 AJAX 3.5 从另一个 DropDownList 填充一个 DropDownList

标签 c# asp.net asp.net-ajax drop-down-menu autopostback

我正在使用带有 ajax 工具包的 asp.net 3.5。

问题:我有一个自定义控件,在更新面板中有两个下拉列表。第一个 DDL 具有属性 AutoPostBack="true" 并且在选择时填充第二个 DDL。问题是在初始页面加载后第一次选择 DDL,整个页面重新加载。第二次选择第一个 DDL 中的项目时,一切都按预期进行。

我已经尝试在 UpdatePanel 中添加触发器,但这并没有改变结果。

感谢任何帮助。

.ascx:

<asp:UpdatePanel ID="popDates" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <p>
                    <asp:DropDownList ID="ddlDivision" runat="server" AutoPostBack="true" style="width:300px"></asp:DropDownList>
                    <asp:RequiredFieldValidator ID="requiredDivision" runat="server" 
                                ControlToValidate="ddlDivision" ErrorMessage="* Please specify a value" 
                                ValidationGroup="valGroupGetDates"
                                InitialValue="Select..." SetFocusOnError="True" CssClass="formValidation">
                    </asp:RequiredFieldValidator>
                </p>
                <p>
                    <asp:DropDownList ID="ddlKMA" runat="server" Enabled="False" AutoPostBack="true" style="width:300px"></asp:DropDownList>
                    <asp:RequiredFieldValidator ID="requiredKMA" runat="server" 
                                ControlToValidate="ddlKMA" ErrorMessage="* Please specify a value" 
                                ValidationGroup="valGroupGetDates"
                                InitialValue="Select..." SetFocusOnError="True" CssClass="formValidation">
                    </asp:RequiredFieldValidator>
                </p>
            </ContentTemplate>
            </asp:UpdatePanel>

ascx.cs:

protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsAsync || Page.IsPostBack)
            {
                String target = Page.Request.Params.Get("__EVENTTARGET");
                //Division Session                
                Session["divisionDropDown"] = ddlDivision.SelectedItem.Value;
                populateDivisionDDL();
                ddlDivision.SelectedValue = Session["divisionDropDown"].ToString();

                if (target != "" && target != null)
                {
                    if (target.Contains("ddlDivision"))
                    {
                        populateKMA(ddlDivision.SelectedValue);
                    }
             }
            }

            if (!Page.IsPostBack)
            {
                populateDivisionDDL();
                ddlKMA.Items.Clear();
                ddlKMA.Items.Add(default_item());
            }
        }
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
    }

aspx:

<body>
    <form id="ViewSPANodeDatesForm" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManagerDates" runat="server"></asp:ScriptManager>
        <viewControl:SPANodeDates ID="SPANodeDates1" runat="server"></viewControl:SPANodeDates>
    </div>
    </form>
</body>

注意:在添加 ajax 控件之前,一切都按预期工作。

谢谢!

最佳答案

这里有三个使用 Controller 和网络服务的级联下拉列表示例。

http://stephenwalther.com/blog/archive/2008/09/07/asp-net-mvc-tip-41-creating-cascading-dropdown-lists-with-ajax.aspx

我可以粘贴全部信息,但我相信链接会更好。甚至斯蒂芬也提供了它的代码示例。 brgds.

关于c# - 使用 AJAX 3.5 从另一个 DropDownList 填充一个 DropDownList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574176/

相关文章:

javascript - 单击 <li> 调用 c# 方法

c# - 同时启动多个线程

c# - 参数如何从 SQL Server 传递到基于 CLR 的存储过程?

javascript - 使用 Telerik RadHtmlChart 开发折线图的向下钻取功能

c# - 根据条件将脚本添加到 ScriptManager

asp.net-ajax - 如何在google SERP页面的特定网站描述中显示搜索框

c# - 控制平衡括号

c# - 如何隐藏控制台窗口?

javascript - 如何使用 Javascript 在 Gridview 中设置来自数据库的文本区域行数

asp.net - 从 VB.NET 类中检查 IsPostBack 或 IsCallBack 的方法