AJAX.NET:CascadingDropDown的几点注意

按照AJAX.NET教程提供的步骤,虽然很快就能得到结果。
但如果不小心对案例改动了一些地方,就很容易使整个案例无法正常显示。
这些小小的改动,在很多时候,是很难注意到其影响的。

(1) Web Method的签名一定不能修改
public CascadingDropDownNameValue[] GetDropDownContents(string knownCategoryValues, string category)
本来我以为参数的名字那些也是可以修改的,但如果把knownCategoryValues的参数名改成其它(如knownCategoryValues_Changed),最后的界面上是不能认出这个方法的

(2) 注意XML数据文件的大小写,应该采用小写的结点名字
如在本例中的<province name="GuangDong">,如果将该数据写成<Province name="GuangDong">,那么即使你在cascadingdropdown的Category属性值和Web Method中的Hierarchy属性值写成"Province",也不能够正确地取到结果,而是会产生以下的没有数据源的页面

因为在CascadingDropDown.QuerySimpleCascadingDropDownDocument方法执行的时候,会把当前的XPath路径转换成小写进行查找,即如果当前的XPath为"/Example/Province",在这个方法中,会被转换成"/Example/province",而用这个XPath是无法在XML数据文件中取得结点的。所以必须把XML数据文件中的结点的名字写成小写。

(3) Hierarchy属性中应该采用小写的名字,如把string[] Hierarchy{get{return new string[]{"province"};}}写成string[] Hierarchy{get{return new string[]{"Province"};}},则会造成二级目录无法读取的情况。因为在CascadingDropDown.QuerySimpleCascadingDropDownDocument方法中,是用Hierarchy属性中的值来生成XPath查找的,奇怪的是这时候生成的XPath却没有将Hierarchy转成小写(这种STYLE好奇怪,呵呵)。

以上三个地方都是很容易被忽视的小地方,但却让人觉得莫明其妙,而且在出现错误的时候不知根源在哪。当然,你可以修改AjaxToolKit的源代码来把这些烦的小错误去掉。

代码一:Web Service的代码

[WebService(Namespace  =   " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public   class  Example : System.Web.Services.WebService  {

    
private static XmlDocument _document;
    
private static object _lock = new object();
    
    
public static XmlDocument Document
    
{
        
get
        
{
            
if (_document == null)
            
{
                
lock (_lock)
                
{
                    _document 
= new XmlDocument();
                    _document.Load(HttpContext.Current.Server.MapPath(
"~/App_Data/Example.xml"));
                }

            }

            
return _document;
        }

    }

    
    
public static string[] Hierarchy
    
{
        
get
        
{
            
return new string[]{"province"};
        }

    }

    
    [WebMethod()]
    
public CascadingDropDownNameValue[] GetDropDownContents(string knownCategoryValues, string category)
    
{
        StringDictionary knownCategoryDictionary 
=
            CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        
return CascadingDropDown.QuerySimpleCascadingDropDownDocument(
            Document, Hierarchy, knownCategoryDictionary, category);        
    }

}

代码二:页面的代码:

 

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Default4.aspx.cs "  Inherits = " Default4 "   %>

<% @ Register Assembly = " AjaxControlToolkit "  Namespace = " AjaxControlToolkit "  TagPrefix = " cc1 "   %>

<! 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 >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< cc1:ToolkitScriptManager ID = " ScriptManager1 "  runat = " Server " >
    
</ cc1:ToolkitScriptManager >
    
< div >
        Province:
        
< asp:DropDownList ID = " DropDownList1 "  runat = " server "  Width = " 246px " >
        
</ asp:DropDownList >< br  />
        City: 
& nbsp;  & nbsp;  & nbsp;  & nbsp; < asp:DropDownList ID = " DropDownList2 "  runat = " server "
            Width
= " 245px " >
        
</ asp:DropDownList >< br  />
        
< br  />
        
< cc1:cascadingdropdown id = " CascadingDropDown1 "  runat = " server "  category = " province "
            loadingtext
= " [Loading Province...] "  prompttext = " Please select the province. "
            servicemethod
= " GetDropDownContents "  servicepath = " Example.asmx "  targetcontrolid = " DropDownList1 " >
            
</ cc1:cascadingdropdown >
    
    
</ div >
        
< cc1:cascadingdropdown id = " CascadingDropDown2 "  runat = " server "  category = " city "  loadingtext = " [Loading City...] "
            parentcontrolid
= " DropDownList1 "  prompttext = " Please select the city. "  servicemethod = " GetDropDownContents "
            servicepath
= " Example.asmx "  targetcontrolid = " DropDownList2 " ></ cc1:cascadingdropdown >
    
</ form >
</ body >
</ html >

 代码三:XML数据文件

<? xml version="1.0" encoding="utf-8"  ?>
< example >
  
< province  name ="GuangDong" >
    
< city  name ="GuangZhou"   />
    
< city  name ="ZhongShan"   />
    
< city  name ="MeiZhou" />
  
</ province >
  
< province  name ="BeiJing" >
    
< city  name ="BeiJing" />
  
</ province >
</ example >
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值