• 回调实现无刷新级联下拉框(.net)


    以northwind数据库为例。选择分类下拉框的一项后,无刷新更改产品下拉框的显示。

    前台代码:

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
        <script type="text/javascript">
            function CallServer(args,context)
            {
                context.innerHTML = "Loading...";
                <%= ClientScript.GetCallbackEventReference(this,"args","GetServerData","context") %>
            }
            function GetServerData(result,context)
            {
                context.innerHTML = result;
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="ddlCategory" runat="server"></asp:DropDownList>
            <span id="pnlProduct">
            <asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>
            </span>
        </div>
        </form>
    </body>
    </html>

    后台代码:

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    public partial class _Default : System.Web.UI.Page,ICallbackEventHandler
    {
        protected string callbackResult;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindToCategory();
                this.ddlCategory.Attributes.Add("onchange", "CallServer(this.value,pnlProduct)");
                this.ddlProduct.Items.Add(new ListItem("--产品--", "-1"));
            }
        }
    
        /// <summary>
        /// 绑定分类
        /// </summary>
        private void BindToCategory()
        {
            SqlConnection conn = new SqlConnection("Server=(local);database=northwind;uid=sa;pwd=123");     
            SqlDataAdapter sda = new SqlDataAdapter("SELECT categoryID,categoryName FROM categories", conn);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            this.ddlCategory.DataSource = dt;
            this.ddlCategory.DataTextField = "categoryName";
            this.ddlCategory.DataValueField = "categoryID";
            this.ddlCategory.DataBind();
            this.ddlCategory.Items.Insert(0, new ListItem("--分类--", "-1"));
        }
    
        private void BindToProduct(int categoryID)
        {
            SqlConnection conn = new SqlConnection("Server=(local);database=northwind;uid=sa;pwd=123");
            SqlDataAdapter sda = new SqlDataAdapter("SELECT productID,productName FROM products WHERE categoryID=" + categoryID, conn);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            this.ddlProduct.DataSource = dt;
            this.ddlProduct.DataTextField = "productName";
            this.ddlProduct.DataValueField = "productID";
            this.ddlProduct.DataBind();
            if (ddlProduct.Items.Count == 0)
            {
                this.ddlProduct.Items.Add(new ListItem("--产品--", "-1"));
            }
        }
    
        private string RenderElement(Control control)
        {
            StringWriter writer = new StringWriter();
            HtmlTextWriter output = new HtmlTextWriter(writer);
            control.RenderControl(output);
            output.Flush();
            output.Close();
            string htmlCode = writer.ToString();
            writer.Close();
            return htmlCode;
        }
    
        void ICallbackEventHandler.RaiseCallbackEvent(string str)
        {
            this.callbackResult = str;
        }
    
        string ICallbackEventHandler.GetCallbackResult()
        {
            int categoryID = Convert.ToInt32(callbackResult);
            BindToProduct(categoryID);
            callbackResult = RenderElement(this.ddlProduct);
            return callbackResult;
        }
    }
  • 相关阅读:
    LAMP课程(3)
    LAMP课程
    vim文本编辑
    mysql常用语句
    mysql双机互相备份
    Java NIO
    适配器模式
    对象的序列化与反序列化
    字符流
    Java Socket
  • 原文地址:https://www.cnblogs.com/CoderWayne/p/4485275.html
Copyright © 2020-2023  润新知