65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VS 2008 创建 ASP.NET AJAX 控件扩展器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.05/5 (6投票s)

2007年12月13日

CPOL

2分钟阅读

viewsIcon

40846

downloadIcon

216

演示如何在 VS 2008 中向 TextBox 添加 AJAX 支持。

引言

ASP.NET AJAX 扩展器控件向页面上已声明的现有控件添加功能(通常是 AJAX 或 JavaScript 支持)。 使用 VS 2005,您必须手动连接控件扩展器(通过源代码视图或属性网格)。 使用新发布的 VS 2008,则不需要这样做,并且可以使用“添加扩展器”功能轻松完成。 以下示例演示如何在 VS 2008 中向 TextBox 添加 AJAX 支持。

使用代码

步骤 1:通过在合适的位置接受默认值,使用 VS 2008 模板创建一个简单的 ASP.NET 网站。

步骤 2:使用 文件->添加->新项目->Visual C# -> ASP.NET AJAX 服务器控件扩展器,添加一个新项目,如图所示

步骤 3:修改 *ExtenderControl1.cs* 如下。 将以下属性添加到 ExtenderControl1

[
    TargetControlType(typeof(TextBox))
]

[
    DefaultProperty("Contacts"),
    ParseChildren(true, "Contacts"),
    ToolboxData(
      "<{0}:QuickContacts runat=\"server\"> </{0}:QuickContacts>")
]

步骤 4:将以下属性添加到 ExtenderControl1

private ArrayList contactsList;
[
Category("Behavior"),
Description("The contacts collection"),
DesignerSerializationVisibility(
    DesignerSerializationVisibility.Content),
Editor(typeof(ContactCollectionEditor), typeof(UITypeEditor)),
PersistenceMode(PersistenceMode.InnerDefaultProperty)
]
public ArrayList Contacts
{
    get
    {
        if (contactsList == null)
        {
            contactsList = new ArrayList();
        }
        return contactsList;
    }
}

步骤 5:修改 GetScriptDescriptors 方法如下

protected override IEnumerable<ScriptDescriptor>
              GetScriptDescriptors(System.Web.UI.Control targetControl)
{
    ScriptBehaviorDescriptor descriptor = new ScriptBehaviorDescriptor(
          "AjaxTextWithTableExtender.ClientBehavior1",
          targetControl.ClientID);
    descriptor.AddProperty("contactsList", this.Contacts);
    return new ScriptBehaviorDescriptor[] { descriptor };

   // yield return descriptor;
}

步骤 6:通过添加以下行来修改 ClientBehavior1.initializeBase 函数

this.contactsList=null;
this.strtext=null;
this.flag=true;

将以下行添加到 ClientBehavior1.prototype Initialize 函数。 注意:逗号要小心。

$addHandler(this.get_element(), 'keyup',
        Function.createDelegate(this, this._onkeyup));
        this._onkeyup();

并添加以下内容

get_contactsList : function() {
    return this.contactsList;
},
set_contactsList : function(value) {

    this.contactsList=value;
    this.raisePropertyChanged('contactsList');
},
_onkeyup : function() {
   this.strtext=document.getElementById("TextBox1").value;
  

var links = new Array ("link1", "link2", "link3"); 
var links_url = new Array ("link1.htm", "link2.htm",  
"link3.htm"); 

/* Resolve the location */ 
var loc=String(this.location); 

loc=loc.split("/"); 
loc=loc[loc.length-1].split("."); 
loc=loc[loc.length-2]; 

           
var v=new Array(this.contactsList);
//////////////////////////////////////////////////////////////////

var t = document.getElementById("TextBox1");
if (t) {
    // alert(this.flag);

    if(this.flag)
    {
        var mybody = document.getElementsByTagName("body")[0];
        // creates <table> and <tbody> elements
        mytable     = document.createElement("table");
        mytablebody = document.createElement("tbody");

        // creating all cells
        for(var j = 0; j < 1; j++) {
            // creates a <tr> element
            for(var i = 0; i < 2; i++) {
            // creates a <td> element

                mycurrent_row = document.createElement("tr");
                if(this.strtext!=null & v[0][i].Email.substring(0,1)!=null)
                {
                    //alert("strtext is not null");

                    if(v[0][i].Email.substring(0,1)==this.strtext.substring(0,1))
                    {
                        //alert("next shows v[0][i].
                        //       Email.substring\(0,1\)==this.strtext.substring\(0,1\)");
                        //alert(v[0][i].Email.substring(0,1)==this.strtext.substring(0,1));

                        mycurrent_cell = document.createElement("td");

                        //////////////////////////////////////////////////

                        linkEmail=document.createElement("a");
                        linkEmail.setAttribute("href",links_url[0]);
                        mycurrent_cell.appendChild(linkEmail);
                        var stre=v[0][i].Email;
                        //alert(str);  

                        currenttext = document.createTextNode(stre);
                        linkEmail.appendChild(currenttext);
                        // appends the cell <td> into the row <tr>
                        mycurrent_row.appendChild(mycurrent_cell);
                                
                        /////////////////////////////////////////////////////

                        mycurrent_cell = document.createElement("td");
                        // creates a Text Node

                        stre=v[0][i].Name;
                        //alert(str);  

                        currenttext = document.createTextNode(stre);
                        // appends the Text Node we created into the cell <td>

                        mycurrent_cell.appendChild(currenttext);
                        // appends the cell <td> into the row <tr>

                        mycurrent_row.appendChild(mycurrent_cell);
                         //////////////////////////////////////////////////   

                        mycurrent_cell = document.createElement("td");
                        // creates a Text Node
  
                           var stre=v[0][i].Phone;
                        //alert(str);  

                        currenttext = document.createTextNode(stre);
                        // appends the Text Node we created into the cell <td>

                        mycurrent_cell.appendChild(currenttext);
                        // appends the cell <td> into the row <tr>

                        mycurrent_row.appendChild(mycurrent_cell);
                        /////////////////////////////////////////////////////
                    }
                }
                mytablebody.appendChild(mycurrent_row);
            }
            // appends the row <tr> into <tbody>
        }

        // appends <tbody> into <table>
        mytable.appendChild(mytablebody);
        // appends <table> into <body>
        mybody.appendChild(mytable);
        // sets the border attribute of mytable to 2;

        mytable.setAttribute("border","2");
        if(this.strtext=='')
            this.flag=true;
        else
            this.flag=false;
        }
    }    
}

步骤 7:用于创建联系人集合的编辑器是 ContactCollectionEditor,它基于以下示例: http://msdn2.microsoft.com/en-us/library/ms178654.aspx。 现在编译 ExtenderControl 项目。 打开网站的 *Default.aspx* 的设计器。 您会在工具箱的顶部找到添加的 ExtenderControl。 现在添加一个 Label 和一个 TextBox,如图所示

步骤 8:单击 TextBox 右侧的箭头,然后选择“添加扩展器”。 将弹出以下屏幕

步骤 9:选择 ExtenderControl1 并接受扩展器的默认 ID。 如果一切正常,则“TextBox”的“添加扩展器”选项下方将显示“删除扩展器”选项。 右键单击 TextBox 并在“属性”中导航到 TextBox1_Extender。 使用以下 ContactCollectionEditor 向 Contacts 集合添加一些虚拟记录

步骤 10:将名为 "link1.htm" 的 HTML 文件添加到您的网站项目。 构建示例并运行该网站。

测试控件

添加字母“a”或您输入的电子邮件记录的首字母,并观看扩展器控件的工作情况。 它应该是这样的

将显示来自 Contacts 集合的匹配记录,并且也可以链接它们。

© . All rights reserved.