您的位置:程序门 -> .net技术 -> asp.net



有没有用asp.net 2.0的callback 实现二个dropdownlist 联动控件的??


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


有没有用asp.net 2.0的callback 实现二个dropdownlist 联动控件的??[已结贴,结贴人:bolar]
发表于:2007-09-18 12:24:05 楼主
有代码吗?给我看看。一定是控件的,谢谢!!!
发表于:2007-09-18 14:36:171楼 得分:0
用cascadingdropdown不好吗?
发表于:2007-09-18 17:29:372楼 得分:0
直接用asp.net   ajax   control   toolkit的cascadingdropdown吧。
发表于:2007-09-19 10:58:563楼 得分:0
我是想研究下callback   功能,我写了段代码,但是存在问题,不理想。所以想看看有没有人用callback写过这样的控件
发表于:2007-09-19 11:16:544楼 得分:0
callback是什么呢?能不能发个地址来学习学习?
发表于:2007-09-19 11:22:175楼 得分:40
结合着ajaxpro写的。
//////////////本地js代码
//   jscript   文件
function   setfirst(obj){
        var   objxi=document.getelementbyid( "ctl00_contentplaceholder1_paracls ");
        objxi.options[objxi.length]=new   option( "正在载入数据…… ", "0 ");
var   lotclsid=obj.options[obj.selectedindex].value;
if(lotclsid==0){
      objxi.length=0;
      var   objpn=document.getelementbyid( "ctl00_contentplaceholder1_paranode ");
              objpn.length=0;
      return;
}
adminparaimp.getclslists(lotclsid,callbank);
}
function   callbank(res){
    if(res.error){
        alert( '发生错误!参数系回调过程中。 ');
        return;
    }
    var   dt=res.value;      
    var   obj=document.getelementbyid( "ctl00_contentplaceholder1_paracls ");
    obj.length=0
    obj.options[obj.length]=new   option( "请选择参数所在系 ", "0 ");
    var   rows=dt.split( " ¦ ");
    if(rows.length==0){
          obj.length=0;
          var   objpn=document.getelementbyid( "ctl00_contentplaceholder1_paranode ");
          objpn.length=0;
          return;
    }
    for(var   i=0;i <rows.length;i++){
            var   item=rows[i].split( ": ");
            obj.options[obj.length]=new   option(item[0],item[1]);
    }
}

function   setsecond(obj){
        var   objpara=document.getelementbyid( "ctl00_contentplaceholder1_paranode ");
        objpara.options[objpara.length]=new   option( "正在载入数据…… ", "0 ");
var   paraclsdad=obj.options[obj.selectedindex].value;
if(paraclsdad==0){
      objpara.length=0;
      return;
}
adminparaimp.getparalists(paraclsdad,cbpara);
}

function   cbpara(res){
    if(res.error){
        alert( '发生错误!在回调过程中。 ');
        return;
    }    
    var   dt=res.value;      
    var   obj=document.getelementbyid( "ctl00_contentplaceholder1_paranode ");
    obj.length=0;
    obj.options[obj.length]=new   option( "请选择参数名 ", "0 ");
    var   rows=dt.split( " ¦ ");
    if(rows.length==0){
          obj.length=0;
          return;
    }
    for(var   i=0;i <rows.length;i++){
            var   item=rows[i].split( ": ");
            obj.options[obj.length]=new   option(item[0],item[1]);
    }
}
function   btnclk(){
        var   objpn=document.getelementbyid( "ctl00_contentplaceholder1_paranode ");
        var   pcid=objpn.options[objpn.selectedindex].value;
        if(pcid==0){
              alert( '请选择参数名 ');
              return;
        }
        var   pcname=objpn.options[objpn.selectedindex].text;
        var   paralist=document.getelementbyid( "txtparalist ").value;
        adminparaimp.btnsumbit_click(pcid,pcname,paralist,cbsub);
}
function   cbsub(res){
        if(res.error){
                alert( '提交错误 ');
                return;
        }
        var   ret=res.value;
        alert( '成功导入 '+ret+ '条数据 ');
        document.getelementbyid( "txtparalist ").value= ' ';
}
发表于:2007-09-19 11:22:366楼 得分:30
dim   strtitle   as   string  
        public   function   getcallbackresult()   as   string   implements   system.web.ui.icallbackeventhandler.getcallbackresult
                return   strtitle
        end   function

        public   sub   raisecallbackevent(byval   eventargument   as   string)   implements   system.web.ui.icallbackeventhandler.raisecallbackevent
                try

                        dim   strsql   as   string   =   "select   distinct   a.emptitlename,   a.emptitleid     from     emptitle   a   inner   join     empranktitle   c   on   a.emptitleid   =   c.emptitleid   cross   join       emprank   b   where   c.emprankid   = ' "   &   eventargument   &   " '   "
                        sdstitle.selectcommand   =   strsql
                        dim   dv   as   dataview   =   sdstitle.select(new   datasourceselectarguments)
                        strtitle   =   " "
                        for   each   drwrow   as   datarow   in   dv.table.rows
                                strtitle   +=   drwrow( "emptitleid ")   &   ", "   &   drwrow( "emptitlename ")   &   " ¦ "
                        next
                catch   ex   as   exception
                        cutillibrary.showmessage(page,   ex.message)
                end   try
        end   sub
=========================================
  dim   strscript   as   string   =   " "

                strscript   +=   " <script   language= 'javascript '> "
                strscript   +=   "function   receiveddata(strdata,   context)   { "
                'strscript   +=   "alert(strdata); "
                strscript   +=   "       var   ddltitle   =   document.forms[0].elements[ ' "   &   ddlqtitle.clientid   &   " ']; "
                strscript   +=   "       ddltitle.length   =   0; "
                strscript   +=   "       if(strdata.length   >   0)   { "
                strscript   +=   "             var   oempty   =   document.createelement( 'option '); "
                strscript   +=   "             oempty.value   =   ' '; "
                strscript   +=   "             oempty.innerhtml   =   ' '; "
                strscript   +=   "             ddltitle.appendchild(oempty); "
                strscript   +=   "             var   rows   =   strdata.split( ' ¦ ');   "
                strscript   +=   "             for   (var   i   =   0;   i   <   rows.length-1;   ++i){ "
                strscript   +=   "                   var   values   =   rows[i].split( ', '); "
                strscript   +=   "                   var   option   =   document.createelement( 'option '); "
                strscript   +=   "                   option.value   =   values[0]; "
                strscript   +=   "                   option.innerhtml   =   values[1];           "
                strscript   +=   "                   ddltitle.appendchild(option); "
                strscript   +=   "             } "
                strscript   +=   "       } "
                strscript   +=   "} "
                strscript   +=   " </script> "

                '建立call   back   觸發機制
                page.clientscript.registerstartupscript(page.gettype,   "buildcallbackreceiveddatajavascript ",   strscript)
                ddlqrank.attributes( "onchange ")   =   clientscript.getcallbackeventreference(me,   "document.all. "   &   ddlqrank.clientid   &   ".value ",   "receiveddata ",   " ")
发表于:2007-09-19 11:23:117楼 得分:0
////////////////////////////////aspx文件
<%@   page   language= "c# "   masterpagefile= "~/admin/default.master "   autoeventwireup= "true "   codefile= "paraimp.aspx.cs "   inherits= "admin_paraimp "   title= "参数导入 "     enableeventvalidation= "false "%>
<asp:content   id= "content1 "   contentplaceholderid= "contentplaceholder1 "   runat= "server ">
<div   id= "articleadd ">
        <ul>
                <li   class= "txt "> 彩种 </li>
<li   class= "ipt ">
<asp:dropdownlist   id= "lotcls "   runat= "server ">
        <asp:listitem   text= "请选择彩种 "   value= "0 "> </asp:listitem>
        <asp:listitem   text= "排列3 "   value= "1 "> </asp:listitem>
        <asp:listitem   text= "福彩3d "   value= "2 "> </asp:listitem>
</asp:dropdownlist>
</li>
<li   class= "help "> 请选择彩种 </li>
</ul>
        <ul>
                <li   class= "txt "> 参数所在系 </li>
<li   class= "ipt "> <select   id= "paracls "   runat= "server "   onchange= "setsecond(this) "   enableviewstate= "false "> </select>
</li>
<li   class= "help "> 请选择参数的系别 </li>
</ul>
<ul>
                <li   class= "txt "> 参数名 </li>
<li   class= "ipt "> <asp:dropdownlist   id= "paranode "   runat= "server "> </asp:dropdownlist>
</li>
<li   class= "help "> 请选择参数类别 </li>
</ul>
<ul>
                <li   class= "txt "> 导入的参数 </li>
<li   class= "ipt "> <textarea   id= "txtparalist "   rows= "8 "   cols= "80 "> </textarea>
</li>
<li   class= "help "> 请填写导入的参数 </li>
</ul>
<ul>
<li   class= "txt "> </li>
<li   class= "ipt "   style= "height:30px;line-height:30px; "> <input   type= "button "   id= "btn "   value= "导   入 "   class= "btn "   onclick= "btnclk(); "   /> </li>
<li   class= "help "> </li>
</ul>
</div>
</asp:content>
发表于:2007-09-19 11:23:548楼 得分:0
////////////////////////////////////////////cs代码。
using   system;
using   system.data;
using   system.configuration;
using   system.collections;
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;
using   system.io;
using   system.text.regularexpressions;
using   system.data.oledb;
[ajaxpro.ajaxnamespace( "adminparaimp ")]
public   partial   class   admin_paraimp   :   system.web.ui.page
{
        protected   void   page_load(object   sender,   eventargs   e)
        {
                controlhelper.addstylesheet(this.page,   "./styles/article.css ");
                controlhelper.addscript(this.page,   "./scripts/paraimp.js ");
                lotcls.attributes.add( "onchange ",   "setfirst(this); ");
                ajaxpro.utility.registertypeforajax(typeof(admin_paraimp));
        }
        [ajaxpro.ajaxmethod]
        public   string   getclslists(string   cls)
        {
                //paranode.items.clear();
                //paranode.items.add(new   listitem( "0 ",   "正在载入数据…… "));
                data   db   =   new   data();
                datatable   dt   =   db.select( "select   *   from   tb_paraclsdad   where   lotclsid= "   +   cls);
                db.close();
                string   retval   =   " ";
                int   tag=0;
                foreach   (datarow   r   in   dt.rows)
                {
                        if   (tag   ==   0)
                        {
                                retval   =   r[ "paraclsname "].tostring()   +   ": "   +   r[ "paraclsdad "].tostring();
                                tag   =   1;
                        }
                        else
                        {
                                retval   +=   " ¦ "   +   r[ "paraclsname "].tostring()   +   ": "   +   r[ "paraclsdad "].tostring();
                        }
                }
                dt.dispose();                
                return   retval;
        }
        [ajaxpro.ajaxmethod]
        public   string   getparalists(string   paraclsdad)
        {              
                data   db   =   new   data();
                datatable   dt   =   db.select( "select   *   from   tb_paracls   where   paraclsdad= "   +   paraclsdad);
                db.close();
                string   retval   =   " ";
                int   tag   =   0;
                foreach   (datarow   r   in   dt.rows)
                {
                        if   (tag   ==   0)
                        {
                                retval   =   r[ "pcname "].tostring()   +   ": "   +   r[ "pcid "].tostring();
                                tag   =   1;
                        }
                        else
                        {
                                retval   +=   " ¦ "   +   r[ "pcname "].tostring()   +   ": "   +   r[ "pcid "].tostring();
                        }
                }
                dt.dispose();                
                return   retval;
        }
        [ajaxpro.ajaxmethod]
        public   int   btnsumbit_click(string   pcid,string   pcname,string   paralist)
        {
             
                //if   (ctlupload.postedfile.contentlength   <   5)
                //{
                //         //response.write( "失败-文件太小了 ");
                //         ;
                //}
                ////   string   pcid   =   "a001 ";//   request.form[ "ctl00_contentplaceholder1_paranode "];//paranode.selectedvalue;
                if   (!chk.natureint(pcid))
                {
                        page.registerclientscriptblock( "err ",   " <script> alert( '请选择正确有效的参数名+[ "   +   pcid   +   "] '); </script> ");
                        //return   0;
                }
                //string   fname   =   server.mappath( "../uploads/ ")   +   datetime.now.tostring( "yyyy-mm-dd_hh-mm-ss_fff ")   +   ".txt ";
                //ctlupload.postedfile.saveas(fname);  
                //string   ret   =   txtparalist.text;
                //streamreader   cin   =   file.opentext(fname);
                //string   curline= " ";
                ////string   pattern=@ "^\d{4}\x20\d{3}\x20\d{1,10}\x20\d{1,10}\x20\d{1,10}\x20\d{1,2}\x20\d{1,2}$ ";
                ////匹配模式:6001   701   2368   359   246   10   2
                string   pattern   =   @ "^\*\d{4}\*.\*\d{3}\*.\*\d{0,10}\*.\*\d{0,10}\*.\*\d{0,10}\*.\*\d{1,2}\*$ ";
                //匹配模式*6005*.*164*.*02368*.*23659*.*0569*.*1*

                string[]   lines   =   paralist.replace(convert.tochar(13).tostring(),   " ").split( '\n ');
                int   ret   =   0;
                for   (int   i   =   0;   i   <   lines.length;   i++)
                {
                        data   db   =   new   data();
                        if   (regex.ismatch(lines[i],   pattern))
                        {
                                string[]   paras   =   lines[i].replace( "* ",   " ").split( '. ');
                                string   len   =   ((int)(paras[2].length   +   paras[3].length   +   paras[4].length)).tostring();
                                string   sql   =   "insert   into   tb_para(pcname,pcid,paraterm,parareal,paraa,parab,parac,paracnt,parahit)   values   ";
                                sql   +=   "( ' "   +   pcname   +   " ', "   +   pcid   +   ", ' "   +   paras[0]   +   " ', ' "   +   paras[1]   +   " ', ' "   +   paras[2]   +   " ', ' "   +   paras[3]   +   " ', ' "   +   paras[4]   +   " ', "   +   len   +   ", "   +   paras[5]   +   ") ";
                                db.EXEC(sql);
                                ret++;
                        }
                        else
                        {
                                ;//   ret   =   convert.toint16(lines[i][lines[i].length   -   1]);
                        }
                        db.close();
                }
                return   ret;
        }
}
发表于:2007-09-19 11:25:319楼 得分:0
我也是初学,改变了dropdownlist的值后好像有问题。但是可以保证正确的联动。
发表于:2007-09-19 11:27:5410楼 得分:0
dropdownlist   都要事先將資料邦定好
发表于:2007-09-20 13:49:0011楼 得分:0
谢谢各位,我回去试试,主要是“子dropdownlist”   的值经常取的不对
发表于:2007-09-20 13:52:2812楼 得分:0
debug1984(debug1984)   你这个不是控件,不是控件问题少,做成控件问题就多了(webcontrol)
发表于:2007-09-20 14:35:2513楼 得分:0
没有办法动态控制dropdownlist中的value吗
发表于:2007-09-21 12:47:0514楼 得分:0
客户端控制没有问题,主要是postback后取值有点问题,继续研究中,有了些成果,只是这两天比较忙,没时间继续弄下去。
发表于:2007-09-21 13:10:0715楼 得分:30
后台代码就不发了,就是ajax方法  
前台html页:
<%@   page   language= "c# "   codebehind= "webform1.aspx.cs "   autoeventwireup= "false "   inherits= "ajaxtest.webform1 "   %>
<html>
<head>
<title> ajax实现无刷新三联动下拉框 </title>
<meta   content= "microsoft   visual   studio   .net   7.1 "   name= "generator ">
<meta   content= "c# "   name= "code_language ">
<meta   content= "javascript "   name= "vs_defaultclientscript ">
<meta   content= "http://schemas.microsoft.com/intellisense/ie5 "   name= "vs_targetschema ">
<script   language= "javascript ">
        function   getdrpdata()  
{  
ajaxmethod2.getpovincelist2(result_callback);
}
function   result_callback(response)
{
if   (response.value   !=   null)
{
//debugger;
document.all( "dropdownlist4 ").length=0;    
     var   ds   =   response.value;
if(ds   !=   null   &&   typeof(ds)   ==   "object "   &&   ds.tables   !=   null)
{
for(var   i=0;   i <ds.tables[0].rows.length;   i++)
     {
     var   name=ds.tables[0].rows[i].province;
       var   id=ds.tables[0].rows[i].provinceid;
       document.all( "dropdownlist4 ").options.add(new   option(name,id));
     }
}
}
cityresult2();
return
}
function   cityresult2()  
{  
var   city=document.getelementbyid( "dropdownlist4 ");
ajaxmethod2.getcitylist(city.value,city_result_callback);
}
function   city_result_callback(response)
{
if   (response.value   !=   null)
{
        document.all( "dropdownlist5 ").length=0;
     var   ds   =   response.value;
if(ds   !=   null   &&   typeof(ds)   ==   "object "   &&   ds.tables   !=   null)
{
        document.all( "listbox1 ").length=0;
for(var   i=0;   i <ds.tables[0].rows.length;   i++)
     {
     var   name=ds.tables[0].rows[i].city;
       var   id=ds.tables[0].rows[i].cityid;
       document.all( "listbox1 ").options.add(new   option(name,id));
       //document.all( "dropdownlist5 ").options.add(new   option(name,id));
     }
}
}
return
}
function   listresult()  
{  
var   list=document.getelementbyid( "listbox1 ");
ajaxmethod2.getarealist(list.value,list_result_callback);
}
function   list_result_callback(response)
{
if   (response.value   !=   null)
{
     var   ds   =   response.value;
if(ds   !=   null   &&   typeof(ds)   ==   "object "   &&   ds.tables   !=   null)
{
for(var   i=0;   i <ds.tables[0].rows.length;   i++)
     {
     var   name=ds.tables[0].rows[i].area;
       var   id=ds.tables[0].rows[i].areaid;
       document.getelementbyid( " <%=textbox2.clientid%> ").innertext=name;
     }
}
}
return
}



//城市------------------------------
function   cityresult()  
{  
var   city=document.getelementbyid( "dropdownlist1 ");
ajaxmethod2.getcitylist(city.value,get_city_result_callback);
}

function   get_city_result_callback(response)
{
if   (response.value   !=   null)
{
//debugger;
document.all( "dropdownlist2 ").length=0;    
     var   ds   =   response.value;
if(ds   !=   null   &&   typeof(ds)   ==   "object "   &&   ds.tables   !=   null)
{
for(var   i=0;   i <ds.tables[0].rows.length;   i++)
     {
     var   name=ds.tables[0].rows[i].city;
       var   id=ds.tables[0].rows[i].cityid;
       document.all( "dropdownlist2 ").options.add(new   option(name,id));
     }
}
}
return
}
//市区----------------------------------------
function   arearesult()  
{  
var   area=document.getelementbyid( "dropdownlist2 ");
ajaxmethod2.getarealist(area.value,get_area_result_callback);
}
function   get_area_result_callback(response)
{
if   (response.value   !=   null)
{
document.all( "dropdownlist3 ").length=0;    
     var   ds   =   response.value;
if(ds   !=   null   &&   typeof(ds)   ==   "object "   &&   ds.tables   !=   null)
{
for(var   i=0;   i <ds.tables[0].rows.length;   i++)
     {
       var   name=ds.tables[0].rows[i].area;
       var   id=ds.tables[0].rows[i].areaid;
       document.all( "dropdownlist3 ").options.add(new   option(name,id));
     }
}
}
return
}
function   getdata()
{
var   province=document.getelementbyid( "dropdownlist1 ");
var   pindex   =   province.selectedindex;
var   pvalue   =   province.options[pindex].value;
var   ptext     =   province.options[pindex].text;

var   city=document.getelementbyid( "dropdownlist2 ");
var   cindex   =   city.selectedindex;
var   cvalue   =   city.options[cindex].value;
var   ctext     =   city.options[cindex].text;

var   area=document.getelementbyid( "dropdownlist3 ");
var   aindex   =   area.selectedindex;
var   avalue   =   area.options[aindex].value;
var   atext     =   area.options[aindex].text;

var   txt=document.getelementbyid( "textbox1 ");

document.getelementbyid( " <%=textbox1.clientid%> ").innertext= "省: "+pvalue+ " ¦ "+ptext+ "市: "+cvalue+ " ¦ "+ctext+ "区: "+avalue+ " ¦ "+atext;
}
</script>
</head>
<body   ms_positioning= "gridlayout ">
<form   id= "form1 "   method= "post "   runat= "server ">
<table   id= "table1 "   style= "z-index:   100;   left:   96px;   position:   absolute;   top:   32px "   cellspacing= "1 "
cellpadding= "1 "   width= "300 "   bgcolor= "#ccff66 "   border= "1 ">
<tr>
<td> 省市 </td>
<td> <asp:dropdownlist   id= "dropdownlist1 "   onclick= "cityresult() "   runat= "server "> </asp:dropdownlist> </td>
</tr>
<tr>
<td> 城市 </td>
<td> <asp:dropdownlist   id= "dropdownlist2 "   onclick= "arearesult() "   runat= "server "> </asp:dropdownlist> </td>
</tr>
<tr>
<td> 市区 </td>
<td> <asp:dropdownlist   id= "dropdownlist3 "   runat= "server "> </asp:dropdownlist> </td>
</tr>
</table>
<asp:dropdownlist   id= "dropdownlist5 "   style= "z-index:   108;   left:   344px;   position:   absolute;   top:   176px "
onclick= "cityresult() "   runat= "server "> </asp:dropdownlist>
<asp:textbox   id= "textbox1 "   style= "z-index:   101;   left:   416px;   position:   absolute;   top:   48px "   runat= "server "
width= "424px "> </asp:textbox> <input   style= "z-index:   102;   left:   456px;   width:   56px;   position:   absolute;   top:   96px;   height:   24px "
onclick= "getdata(); "   type= "button "   value= "test ">
<asp:dropdownlist   id= "dropdownlist4 "   onclick= "cityresult2() "   style= "z-index:   104;   left:   168px;   position:   absolute;   top:   176px "
runat= "server "> </asp:dropdownlist> <input   style= "z-index:   105;   left:   96px;   position:   absolute;   top:   176px "   type= "button "   value= "test2 "
onclick= "getdrpdata(); ">
<asp:listbox   id= "listbox1 "   onclick= "listresult() "   style= "z-index:   106;   left:   40px;   position:   absolute;   top:   232px "   runat= "server "
width= "120px "   height= "168px "> </asp:listbox>
<asp:textbox   id= "textbox2 "   style= "z-index:   107;   left:   168px;   position:   absolute;   top:   232px "
runat= "server "   width= "176px "   height= "160px "   textmode= "multiline "> </asp:textbox>
</form>
</body>
</html>


快速检索

最新资讯
热门点击