【问题标题】:ASP.net dynamic drop down lists, how to use JQuery and AJAX instead?ASP.net 动态下拉列表,如何使用 JQuery 和 AJAX 代替?
【发布时间】:2009-10-08 15:29:11
【问题描述】:

我编写了一些使用 ASP.Net、C# 和 AJAX 更新面板的代码。 我创建了这个用户控件,其中一个转发器由 BusinessTier 数据表的内容填充。对于每个业务层,都有关联的业务级别,这些级别会填充 BusinessLevel 数据表中的下拉列表。 一个业务级别是一组业务层的父级,业务层指示每组业务级别在层次结构中的位置。 Tier 1 为 Company,业务层为公司名称。第 2 层是业务,第 2 层的关联业务层每个都包含在第 1 层中分配的父业务层。依此类推。我希望这是有道理的! 这些业务层下拉列表是级联下拉列表。但是不能使用 AJAX 级联下拉列表控件,因为在初始表单加载中,许多下拉列表将在运行时分配。此外,下拉菜单的数量也在运行时动态确定,具体取决于数据库的内容。 因此,对于每个 SelectedIndexChanged 事件,必须有一个回发来重新计算下拉列表的新内容。 下面的代码有效。这些回发可以包含在更新面板中,并且控件没问题,我可以使用它。 然而 ... 一定有更好的方法使用 AJAX 和 JQuery,而不是一开始就拥有所有这些回发?如果有怎么办? 我想了解更多关于 AJAX 和 JQuery 的信息,所以如果您有解决方案,我会很高兴看到它。 代码如下;

<%@ Control Language="C#" AutoEventWireup="true" 
     CodeBehind="BusinessLevelSelection.ascx.cs" 
                Inherits="TestLinq.BusinessLevelSelection" %>
<div id="mainleft">
  <fieldset style="width:200px;padding:3px">
      <legend>Business Level</legend>  
      <asp:UpdatePanel runat="server" ID="updBusinessLevels">
      <ContentTemplate>
      <asp:Repeater runat="server" ID="rpDropDowns" 
        OnItemDataBound="rpDropDowns_OnItemDataBound"
        >
        <ItemTemplate>
            <h2><%#  DataBinder.Eval(Container.DataItem, "NameFull")%></h2>
            <div>
                <asp:DropDownList runat="server" ID="ddlBusinessLevels" 
                 AutoPostBack="true" 
                    OnSelectedIndexChanged="ddlBusinessLevels_SelectedIndexChanged"
                    ToolTip='<%#  DataBinder.Eval(Container.DataItem, "NameFull")%>'
                />
            </div>
        </ItemTemplate>
      </asp:Repeater></ContentTemplate></asp:UpdatePanel>
  </fieldset>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ClassLibraryBusinessLevels;

namespace TestLinq
{
    public partial class BusinessLevelSelection : System.Web.UI.UserControl
    {
        public int SelectedBusinessLevelId
        {
            get;
            set;
        }

        public int? ParentBusinessLevelId
        {
            get;
            set;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
                LoadData();
        }

        private void LoadData()
        {
            BOL.GetBusinessLevelTiers();
            LoadDataLatest();
        }

        /// <summary>
        /// LoadDataLatest() - Loads the latest data, either from the initial load, 
        ///                     or from the change in the business level selection event
        /// </summary>
        private void LoadDataLatest()
        {
            BOL.GetBusinessLevels(this.SelectedBusinessLevelId);

            this.ParentBusinessLevelId = null;

            rpDropDowns.DataSource = BOL.blTiers;
            rpDropDowns.DataBind();
        }

        protected void rpDropDowns_OnItemDataBound(Object Sender, RepeaterItemEventArgs e)
        {
            // Execute the following logic for Items and Alternating Items.
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                PopulateDropDownList(e.Item.FindControl("ddlBusinessLevels") as DropDownList, e.Item.ItemIndex);
            }
        }

        private void PopulateDropDownList(DropDownList ddlBusinessLevels, int index)
        {
            if (index <= BOL.blCollection.Count)
            {
                ddlBusinessLevels.DataSource =
                    BOL.GetBusinessLevelsForDropDowns(index, this.ParentBusinessLevelId);
                ddlBusinessLevels.DataValueField = "BusinessLevelId";
                ddlBusinessLevels.DataTextField = "BusinessLevelName";
                ddlBusinessLevels.DataBind();

                if (index < BOL.blCollection.Count)
                {
                    ddlBusinessLevels.SelectedValue = BOL.blCollection[index].BusinessLevelId.ToString();
                    this.ParentBusinessLevelId = BOL.blCollection[index].BusinessLevelId;
                }
            }
            ddlBusinessLevels.Items.Insert(0, new ListItem("Please enter your selection", "0"));
        }

        protected void ddlBusinessLevels_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList ddlBusinessLevels = (DropDownList)sender;
            this.SelectedBusinessLevelId = Convert.ToInt32(ddlBusinessLevels.SelectedValue);
            this.LoadDataLatest();
        }
    }
}

【问题讨论】:

    标签: asp.net jquery ajax


    【解决方案1】:

    下面是如何将 jQuery 与 Cascading DropDownLists 一起使用:http://www.mikesdotnetting.com/Article/97/Cascading-DropDownLists-with-jQuery-and-ASP.NET

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2013-04-16
      • 2012-06-04
      • 1970-01-01
      • 2011-02-23
      • 2015-05-03
      • 2016-04-24
      相关资源
      最近更新 更多