none
test RRS feed

全部回复

  •  

    2. DataList 控件  [回到顶端]

     

    2.1 水平地呈现数据  [回到顶端]

      

    Gridview控件一行接一行地显示数据,这意味着布局是垂直的。要以其它的布局呈现数据,Datalist控件是个好的选择。例如,他可以通过设置RepeatDirection="Horizontal"水平地显示数据。你同样可以使用Repeatcolumns属性去控制在每一行显示多少列。

     

     

    2.2 DataList控件的分页  [回到顶端]

      

    不同于Gridview控件,Datalist控件没有自动分页支持。要支持分页功能,你必须添加代码,如下例所示:

     

    int PageSize, RecordCount, PageCount, CurrentPage;

    SqlConnection MyConn;

    public int IndexOfPage

    {

        get { return (int)ViewState["_IndexOfPage"]; }

        set { ViewState["_IndexOfPage "] = value; }

    }

    public int CountOfPage

    {

        get { return (int)ViewState["_CountOfPage"]; }

        set { ViewState["_CountOfPage"] = value; }

    }

    public void Page_Load(Object src, EventArgs e)

    {

        PageSize = 3;

        string MyConnString =

         @"Server=(local)\SQLEXPRESS;Integrated Security=SSPI;Database=test;Persist Security Info=True";

        MyConn = new SqlConnection(MyConnString);

        MyConn.Open();

        if (!Page.IsPostBack)

        {

            ListBind();

            CurrentPage = 0;

            IndexOfPage = 0;

            RecordCount = CalculateRecord();

            lblRecordCount.Text = RecordCount.ToString();

            PageCount = RecordCount / PageSize;

            lblPageCount.Text = PageCount.ToString();

            CountOfPage = PageCount;

        }

    } 

    public int CalculateRecord()

    {

        int intCount;

        string strCount = "select count(*) as co from student";

        SqlCommand MyComm = new SqlCommand(strCount, MyConn);

        SqlDataReader dr = MyComm.ExecuteReader();

        if (dr.Read())

        {

            intCount = Int32.Parse(dr["co"].ToString());

        }

        else

        {

            intCount = 0;

        }

        dr.Close();

        return intCount;

    }

    ICollection CreateSource()

    {

        int StartIndex;

        StartIndex = CurrentPage * PageSize;

        string strSel = "select * from student";

        DataSet ds = new DataSet();

        SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel, MyConn);

        MyAdapter.Fill(ds, StartIndex, PageSize, "Score");

        return ds.Tables["Score"].DefaultView;

    }

    public void ListBind()

    {

        DataList1.DataSource = CreateSource();

        DataList1.DataBind();

        lbnNextPage.Enabled = true;

        lbnPrevPage.Enabled = true;

        if (CurrentPage == (PageCount - 1)) lbnNextPage.Enabled = false;

        if (CurrentPage == 0) lbnPrevPage.Enabled = false;

        lblCurrentPage.Text = (CurrentPage + 1).ToString();

    }

    public void Page_OnClick(Object sender, CommandEventArgs e)

    {

        CurrentPage = (int)IndexOfPage;

        PageCount = (int)CountOfPage;

        string cmd = e.CommandName;

        switch (cmd)

        {

            case "next":

                if (CurrentPage < (PageCount - 1)) CurrentPage++;

                break;

            case "prev":

                if (CurrentPage > 0) CurrentPage--;

                break;

        }

        IndexPage = CurrentPage;

        ListBind();

    }

     

    相关帖子:

    DataList分页

     

      

    3. DetailsView 控件  [回到顶端]

     

    3.1/详细情况  [回到顶端]

      

    如果你想在Griview控件中显示所有记录,并且希望能够显示一条记录的细则。你需要使用另一个显示控件。一种方发是在Gridview控件中添加一个Select按钮列去显示选择的数据记录,你通常为此使用Detailsview控件。更多信息,参见ASP.NET 网站上的Master-Details

     

     

    4. 常见问题  [回到顶端]

     

    4.1 如何在数据呈现控件中动态创建列?  [回到顶端]

      

    当你不确定你应该添加多少列到Gridview控件时,你可以使用自定义模板控件动态创建列,如下例所示:

     

    protected void Page_Load(object sender, EventArgs e)

    {

            if (!IsPostBack)

            {

                TemplateField customField1 = new TemplateField();

                customField1.ShowHeader = true;

                customField1.HeaderTemplate =

                    new GridViewTemplate(DataControlRowType.Header, "ID", "");

                customField1.ItemTemplate =

                    new GridViewTemplate(DataControlRowType.DataRow, "", "Contract");

                GridView1.Columns.Add(customField1);

                GridView1.DataSource = GetDataSource();

                GridView1.DataBind();

            }

    }

     

    public class GridViewTemplate : ITemplate

    {

        private DataControlRowType templateType;

        private string columnName;

        private string columnNameBinding;

        public GridViewTemplate(DataControlRowType type, string colname,

            string colNameBinding)

        {

            templateType = type;

            columnName = colname;

            columnNameBinding = colNameBinding;

        }

        public void InstantiateIn( System.Web.UI.Control container )

        {

            switch (templateType)

            {

                case DataControlRowType.Header:

                    Literal lc = new Literal();

                    lc.Text = columnName;         

                    container.Controls.Add(lc);         

                    break;

                case DataControlRowType.DataRow:

                    CheckBox cb = new CheckBox();

                    cb.ID = "cb1";

                    cb.DataBinding += new EventHandler(this.cb_OnDataBinding); 

                    container.Controls.Add(cb);

                    break;

                default:

                    break;

            }

        }

        public void cb_OnDataBinding(object sender, EventArgs e)

       {

            CheckBox cb = (CheckBox)sender;

            GridViewRow container = (GridViewRow)cb.NamingContainer;

            cb.Checked = Convert.ToBoolean(

                ((DataRowView)container.DataItem)[columnNameBinding].ToString());

        }

    }

     

    相关帖子:

    自定义GridView字段的文章

    如何创建一个动态GridView控件

     

      

    4.2 连接字符串的设置  [回到顶端]

      

    你可以在Web.config文件中或在代码中配置连接字符串,更多信息参见ASP.NET网站Connection Strings Configuration

     

    相关帖子:

    Web.config文件中的连接字符串

    连接字符串问题

     

     

    4.3 如何在GridViewDataGrid中显示固定宽度的列?  [回到顶端]

      

    默认情况下,Gridview和Datagrid控件依据它们的内容自动调整列大小。要为列指定固定宽度,设置每个Tablecell对象的Width属性并设置Wrap属性为False。下面的例子显示了如何通过使用DataGrid控件去做。

     

    protected void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)

    {

        ListItemType lit = e.Item.ItemType;

        if (lit == ListItemType.Header)

        {

            for (int i = 0; i < e.Item.Cells.Count; i++)

            {

                e.Item.Cells[i].Width = Unit.Pixel(50);

                e.Item.Cells[i].Wrap = false;

            }

        }

    }

     

      

    4.4 何时使用GridView/DataGrid/DataList/Repeater控件?  [回到顶端]

      

    关于应该使用哪一个数据呈现控件的信息,参见MSDN网站上的Deciding when to use the DataGrid, DataList, or Repeater

     

    2009年7月13日 13:46
  •  

    8.样式  [回到顶端]

     

    8.1 如何在Code-Behind中使用?  [回到顶端]

     

    Label1.Attributes.Add("style", "background-color:Red");

     

     

    8.2 如何在JavaScript中使用?  [回到顶端]

     

    document.getElementById("Label1").style.backgroundColor = "Red";

     

     

    8.3 如何移除空格?  [回到顶端]

     

    添加下面的代码到“head”标签内

    <style type="text/css">

    body

    {

        padding: 0px;

        margin: 0px;

    }

    </style>

     

     

    8.4 如何和html一起使用?  [回到顶端]

     

    <link href="<%= CSS %>" rel="stylesheet" type="text/css" />

     

    注意: CSS是极其有价值的

    Linked style sheet 通常位于<head>标签中,但是如果它被放到<body>标签内也不必担心。同时, <head>标签必须有runat=”server” 属性。

     

    相关帖子:

    http://forums.asp.net/p/1197909/2076464.aspx 

     

     

    8.5 如何把image设置为Button的背景?  [回到顶端]

     

    <input name="Submit" type="button" value="" style="border-style: none; background-color: Transparent; background-image: url('bg.png'); width: 68px; height: 20px; vertical-align: middle;" />

     

    相关贴子:

    http://forums.asp.net/t/299555.aspx

     

     

    8.6 如何为ListBoxitems着色?  [回到顶端]

     

    示例代码:

    <style type="text/css">

    .optred{background-color:red;}

    .optblue{background-color:blue;}

    </style>

     

    protected void Page_PreRender(object sender, EventArgs e)

    {

        bool flag=false;

        foreach (ListItem li in ListBox1.Items)

        {

            if (flag)

            {

                li.Attributes.Add("class", "optred");

                flag = false;

            }

            else

            {

                li.Attributes.Add("class", "optblue");

                flag = true;

            }

        }

    }

     

    请参见:

    http://www.codeproject.com/KB/webforms/ColorListBox.aspx 

     

    2009年7月13日 13:47
  •  

    15. Animation  [回到顶端]

     

    15.1 来自 Ms Ajax AnimationExtender的脚本 Animations   [回到顶端]

     

    http://blogs.msdn.com/phaniraj/archive/2007/05/31/scripting-animations-from-the-ms-AJAX-animationextender.aspx

     

     

    15.2 如何在页面中重新使用Animation Extenders?  [回到顶端]

     

    http://blogs.msdn.com/phaniraj/archive/2007/08/15/how-to-re-use-animation-extenders-in-a-page.aspx

     

     

    15.3 MS AJAX AnimationExtender : 有多少方式播放thee?  [回到顶端]

     

    http://blogs.msdn.com/phaniraj/archive/2007/04/13/animations-how-many-ways-do-i-call-thee.aspx

     

     

    15.4如何添加animation SlideShow?  [回到顶端]

     

    这个主题 说明了如何同时使用它们。

     

     

    16. Custom Extender  [回到顶端]

     

    16.1 贡献给Toolkitt  [回到顶端]

     

    我们正在尝试一种新的对工具包的贡献模式,这也适用于修复现有控件和引进新的控件到工具包,你可以找到关于How to contribute to the ToolkitHow to use the Toolkit Patch Utility的更多信息。

     

     

    16.2 如何让自己的控件包含在ASP.NET AJAX Control Toolkit?  [回到顶端]

     

    正如你可能已经注意到的Shawn欢迎讯息, 我们正在积极工作制造ASP.NET AJAX Control Toolkit,一个社区贡献者的开源项目。我们仍然在解决所有细节,但是我们保证让你知道什么时候/如何/哪儿关于工具包的下一步行动。如果您有任何惊人的控件或美好的见解,你可以张贴它们到论坛去和你的开发伙伴共享。

     

     

    16.3  我没有看到对提供的项目或从模板中创建的项目中的JavaScript文件的自己的修改  [回到顶端]

     

    为使你控件的部署更容易,所有的JavaScript 文件按默认嵌入到web resources 中(经过扩展器顶部一个区域的WebResourceAttribute )。这意味着他们和剩余的资源被编译到二进制并间接交付到客户端。如果你对脚本做了一些修改,当测试是为了在客户端能够看到改变你需要重建项目,为了使更容易调试你的脚本没有不断重建,为更多关于ScriptPath属性,检查Other Neat Stuff 的这部分"Easily modifying and debugging scripts"

     

    相关主题:
    Confirmation message on ReorderList

     

     

    16.4 得到新控件"断言失败:无法辨识的标记"错误  [回到顶端]

     

    基于以下一个或多个原因,这些错误信息或出现:

    1. 你没有使你的脚本成为内嵌的资源(选择文件,在属性窗口设置"Build Action" "Embedded Resource")当你创建ASP.NET AJAX Control Project,这将作为作为默认发生。但是需要手工去做如果新的控件被添加到项目。 

    2. 扩展器顶部的WebResourceAttribute并没有正确指向你的JavaScript文件资源的名字。 如果你不能确保正确的资源名是什么,你可以通过运行ILDASM Reflector 很容易的找到,并找到你清单资源中的脚本。 

    3. 扩展器属性ClientScriptResource("prefix", "tag", typeof(MyControlExtender), "Same.Value.As.WebResourceAttribute.Above.js")] 提供的值不匹配前缀和通过Sys.TypeDescriptor.addType('prefix', 'tag', MyCompany.MyControl)在脚本底端提供的标签名,或者上面WebResourceAttribute中的资源名。

     

    相关主题:
    Assertion Failed: Unrecognized tag Error

     

    2009年7月13日 13:47
  •   

    5.4如何为控件呈现动态工具提示(ToolTip)?   [回到顶端]

     

    一些控件具有ToolTip属性,当鼠标光标移到上面时能够显示详细信息。

     

    尽管如此,当你想为GridView的每一个单元格动态显示工具提示时,或者为Calendar的每一个确定日期显示动态工具提示时,‘ToolTip’属性是不够的。

     

    为了实现控件的动态工具提示,你可以使用Control.Attributes.Add JavaScript 函数去部署每个控件的各自的工具提示。

     

    GridView中的每个单元格显示动态的工具提示(ToolTip):

    1.  请从下面的链接下载wz_tooltip.ziphttp://www.walterzorn.com/tooltip/tooltip_e.htm.

    2.  你可以通过GridView1_RowDataBound中的Attributes.Add为每一个单元格添加‘onmouseover’事件来显示工具提示。

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

            e.Row.Attributes.Add("onmouseover", "Tip(Some Text’)");

        }

    }

      

    相关主题http://forums.asp.net/p/1204633/2109842.aspx#2109842 

     

    Calendar中为指定的日期显示动态的工具提示(ToolTip):

    下面的例子能够在calendar中突出显示某一日期。下面的代码允许你处理DayRender事件。

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)

    {

        if (e.Day.IsOtherMonth)

        {

            e.Cell.BackColor = Color.FromArgb(204, 204, 204);

            e.Cell.ForeColor = Color.FromArgb(204, 204, 204);

            e.Cell.Text = "";

        }

        else

        {

            if (e.Day.Date == new DateTime(2008, 3, 27))

            {

                e.Cell.BackColor = System.Drawing.Color.Red;

                e.Cell.ForeColor = System.Drawing.Color.Yellow;

                e.Day.IsSelectable = false;

                e.Cell.Font.Strikeout = true;

            }

            if (e.Day.Date == new DateTime(2008, 3, 14))

            {

                e.Cell.BackColor = System.Drawing.Color.Red;

                e.Cell.ForeColor = System.Drawing.Color.Yellow;

                e.Day.IsSelectable = false;

                e.Cell.Font.Strikeout = true;

            }

        }

    }

      

    根据选择的日期,你可以在SelectionChanged 事件中为该日期显示更多的信息。

     

    你同时可以为Calendar 中的日期创建鼠标悬浮提示。如果鼠标指针悬浮在某一日期的上方,关于那天的信息将会显示。

     

    为显示提示,你可以首先从下面的链接下载 ‘wz_tooltip.zip’: http://www.walterzorn.com/tooltip/tooltip_e.htm

     

    在下载这个工具之后,你可以添加JavaScript文件到ASPX文件中去引用它。

    <script type="text/javascript" src="../js/wz_tooltip.js"></script>

      

    接着添加mouseover事件到某一日期:

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)

    {

        if (e.Day.Date.Day == 18)

        {

            string s = "This day is 18";

            e.Cell.Controls.Add(new LiteralControl("&lt;a href='#' onmouseover=\"Tip('" + s + "')\"&gt;*</a>"));

        }

    }

      

    相关主题: http://forums.asp.net/p/1233642/2238841.aspx#2238841

      

      

    6.Image操作  [回到顶端]

     

    6.1如何调整图像大小?   [回到顶端]

     

    你可以使用System.Drawing去调整大小或旋转它,下面的代码能协助你。

     

    using System.Drawing.Imaging;

    using System.Drawing;

    using System.Drawing.Drawing2D;

    string strFilename;

    System.Drawing.Image tImage;

    strFilename = Server.MapPath("a.jpg");

    tImage = System.Drawing.Image.FromFile(strFilename);

    int width = 50;//你希望的图片的最初大小

    Bitmap b = new System.Drawing.Bitmap(width, (tImage.Height * width) / tImage.Width, PixelFormat.Format24bppRgb);// 新图片的大小

    Graphics g = Graphics.FromImage(b);

    g.Clear(Color.White);  

    g.DrawImage(tImage, 0, 0, width, (tImage.Height * width) / tImage.Width);

    Response.ContentType = "image/jpeg";

    b.Save("c:/test.jpg", ImageFormat.Jpeg);

    //b.Save(Response.OutputStream,     ImageFormat.Jpeg); //通过该行,你可以输出图像到页面

    b.Dispose();

    g.Dispose();

      

    相关主题: http://forums.asp.net/t/1203136/2103396.aspx

      

      

    6.2 如何显示动态生成的图像?  [回到顶端]

     

    你可以在MemoryStream的帮助下使用.ASPX 或者.ASHX输出图像(System.Drawing.Image)

     

    pic.aspx/pic.ashx:

    System.IO.MemoryStream ms = new System.IO.MemoryStream();

    image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

    Response.ClearContent();

    Response.ContentType = "image/Gif";

    Response.BinaryWrite(ms.ToArray());

    ms.Close();

      

    此后,System.Web.UI.Webcontrols.Image控件能够通过指向showpic.aspxImageUrl找到这个页面:

    <asp:Image ID="Image1" runat="server" ImageUrl="~/pic.ashx"/>

      

    关于.ASHX 文件:

    大多数.NET Web 应用程序使用.ASPX ASCX (User Controls)文件构造。尽管如此,ASP.NET通过.ASHX文件提供了一个非常容易的方法去创建HTTP处理程序。

     

    你可以参看这个链接去了解更多.ASHX文件: http://forums.asp.net/p/1166701/1942455.aspx.

     

    相关主题: http://forums.asp.net/t/1220818.aspx

      

      

    7.Office相关  [回到顶端]

     

    7.1 ASP.NET中能否自动化Office 应用程序 (如:Word Excel)?   [回到顶端]

     

    所有Microsoft Office的现行版本都被设计,测试,配置为运行于客户端工作站的终端用户产品。他们假设一个交互性的桌面和用户配置文件没有提供重新进入的水准或者必须满足被设计在无监控下运行的服务器端组件的需求。

     

    Microsoft眼下并不推荐也不支持通过任何非交互性的客户端应用程序或组件(包括 ASP, DCOM, NT Services)使Microsoft Office应用程序的自动化。 因为在这种环境下使用,Office 可能显现的不稳定或者死锁。

     

    你可以从下面KB articles 获得更多详细资料:

    Office服务器端的自动化的思索

    http://support.microsoft.com/?id=257757

      

    在某一用户账号下如何配置Office应用程序的运行

    http://support.microsoft.com/?id=288367

      

      

    7.2如何从Excel文件提取数据并从数据库导出数据到Excel文件?   [回到顶端]

     

    Excel文件提取数据:

    你可以使用OLEDB JET 引擎从Excel文件提取数据

    string connstr ="Provider=Microsoft.Jet.Oledb.4.0;Data Source=C:\aaa.xls;Extended Properties=Excel 8.0"/>

    OleDbConnection conn = new OleDbConnection(connstr);

    string strSQL = "SELECT * FROM [Sheet$]";

    OleDbCommand cmd = new OleDbCommand(strSQL, conn);

    DataSet ds = new DataSet();

    OleDbDataAdapter da = new OleDbDataAdapter(cmd);

    da.Fill(ds);

    GridView1.DataSource = ds;

    GridView1.DataBind();

      

    从数据库导出数据到Excel文件:

    这儿有两种方法:

    1. 你可以使用GridView并呈现它的表格式内容为Excel文件: Export DataSet to Excel Sheet

    2. 你同样可以直接为Excel 文件写XML Export treeview to excel.

     

    2009年7月13日 13:48
  •   

    8.验证和正则表达式  [回到顶端]

     

    8.1如何执行复杂验证?  [回到顶端]

     

    当内建的服务器验证控件像RequiredFieldValidatorRegularExpressionValidator 没有达到复杂验证工作时,你可以尝试CustomValidator

     

    关于CustomValidator:

    使用CustomValidator控件去为输入控件提供用户定义验证函数。CustomValidator 控件是一个从它验证的输入控件分离的控件,允许你去控制在哪儿显示验证信息。

     

    验证控件一直在服务器执行验证。它们同时有完整的客户端的执行,允许浏览器脚本在客户端执行验证。客户端验证通过在它发送到服务器前检查用户的输入促进了验证的过程,这允许在窗体提交前在客户端检测错误,这避免了为服务器端验证所需的信息的往返行程。

     

    通过下面的链接你可以获得更多的信息: http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.aspx

      

    例如:

    我如何确保在一个ListBox中有不超过50个项目被选中?

     

    其它的验证控件可能有困难去实现它,你可以尝试CustomValidator:

    <script type="text/javascript" language="javascript">

    function CustomValidator1_ClientValidate(source,args)

    {  

           var listbox = document.getElementById("<%=ListBox1.ClientID %>");

           var total = 0;

           var i=0;

           for( i = 0; i < listbox.options.length; i++ )

           {

                if (listbox.options[i].selected)

                {

                    total ++;               

                    if (total > 50)

                    {

                        args.IsValid = false;

                        return;

                    }

                }           

           }

     

           args.IsValid = true;

           return;

    }

    </script>

    <asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple"

        Height="71px" Width="80px">

    </asp:ListBox>

    <br />

    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div>

    <asp:CustomValidator id="CustomValidator1" runat="server" Display="Dynamic" ErrorMessage="You can only select up to 50 items."

            ClientValidationFunction="CustomValidator1_ClientValidate" OnServerValidate="CustomValidator1_ServerValidate">

    </asp:CustomValidator>

      

    隐藏代码

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)

    {

        int count = 0;

        for (int i = 0; i < ListBox1.Items.Count; i++)

        {

            if (ListBox1.Items[i].Selected)

                count++;

        }

        args.IsValid = (count <= 50);

    }

     

    protected void Button1_Click(object sender, EventArgs e)

    {

        if (Page.IsValid)

        {

            //validating is successful.

        }

    }

      

    相关主题:

    http://forums.asp.net/t/1199803.aspx

    http://forums.asp.net/t/1236727.aspx

      

    2009年7月13日 13:51
  •  

    8.样式  [回到顶端]

     

    8.1 如何在Code-Behind中使用?  [回到顶端]

     

    Label1.Attributes.Add("style", "background-color:Red");

     

     

    8.2 如何在JavaScript中使用?  [回到顶端]

     

    document.getElementById("Label1").style.backgroundColor = "Red";

     

     

    8.3 如何移除空格?  [回到顶端]

     

    添加下面的代码到“head”标签内

    <style type="text/css">

    body

    {

        padding: 0px;

        margin: 0px;

    }

    </style>

     

     

    8.4 如何和html一起使用?  [回到顶端]

     

    <link href="<%= CSS %>" rel="stylesheet" type="text/css" />

     

    注意: CSS是极其有价值的

    Linked style sheet 通常位于<head>标签中,但是如果它被放到<body>标签内也不必担心。同时, <head>标签必须有runat=”server” 属性。

     

    相关帖子:

    http://forums.asp.net/p/1197909/2076464.aspx 

     

     

    8.5 如何把image设置为Button的背景?  [回到顶端]

     

    <input name="Submit" type="button" value="" style="border-style: none; background-color: Transparent; background-image: url('bg.png'); width: 68px; height: 20px; vertical-align: middle;" />

     

    相关贴子:

    http://forums.asp.net/t/299555.aspx

     

     

    8.6 如何为ListBoxitems着色?  [回到顶端]

     

    示例代码:

    <style type="text/css">

    .optred{background-color:red;}

    .optblue{background-color:blue;}

    </style>

     

    protected void Page_PreRender(object sender, EventArgs e)

    {

        bool flag=false;

        foreach (ListItem li in ListBox1.Items)

        {

            if (flag)

            {

                li.Attributes.Add("class", "optred");

                flag = false;

            }

            else

            {

                li.Attributes.Add("class", "optblue");

                flag = true;

            }

        }

    }

     

    请参见:

    http://www.codeproject.com/KB/webforms/ColorListBox.aspx 

     

    2009年7月13日 13:53
  •  

    9.打印  [回到顶端]

     

    9.1 如何用CSS去打印web page的一部分?  [回到顶端]

     

    CSS代码:

    <style media="print">

            .Noprint

            {

                display: none;

            }

            .Print

            {

                page-break-after: always;

            }

    </style>

     

    HTML代码:

    <div class="Noprint">

         I am not print;

    </div>

    <div class="Print">

         I will print;

    </div>

     

    相关帖子:

    http://forums.asp.net/t/981539.aspx

     

    9.2 如何通过JavaScript去打印web page的一部分(1)  [回到顶端]

     

    JavaScript代码:

    <script language="JavaScript" type="text/JavaScript">

            function doPrint() {

            bdhtml=window.document.body.innerHTML;

            sprnstr="<!--startprint-->";

            eprnstr="<!--endprint-->";

            prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);

            prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));

            window.document.body.innerHTML=prnhtml;

            window.print();

            }

    </script>

     

    HTML代码:

    <!--startprint-->

    This area will print!

    <!--endprint-->

    <br />

    I will not print?

    <input id="btnPrint" type="button" value="Print" onclick="doPrint()" />

     

    相关帖子:

    http://forums.asp.net/p/1234564/2256428.aspx

     

     

    9.3 如何通过JavaScript去打印web page的一部分(2)  [回到顶端]

     

    JavaScript代码:

    <script language="javascript" type="text/javascript">

        function printdiv(divID)

        {

          var headstr = "<html><head><title></title></head><body>";

          var footstr = "</body>";

          var newstr = document.all.item(divID).innerHTML;

          var oldstr = document.body.innerHTML;

          document.body.innerHTML = headstr+newstr+footstr;

          window.print();

          document.body.innerHTML = oldstr;

          return false;

        }

    </script>

     

    HTML代码:

    <input name="b_print" type="button" onclick="printdiv('divID');" value=" Print " />

    <div id="divID">

    <h1 style="color:green">

    The Div content which you want to print</h1>

    </div>

     

    相关帖子:

    http://forums.asp.net/t/1263912.aspx

     

    2009年7月13日 13:55
  •  

    10.邮件  [回到顶端]

     

    10.1 ASP.NET中哪些类被使用去发送e-mails  [回到顶端]

     

    MailMessageSmtpMailASP.NET应用程序中被用于发送emailsMailMessage SmtpMail来自于NET Framework 1.1 类库中的System.Web.Mail命名空间。并且,假若你已经安装了.NET Framework 2.0,你可以使用System.Net.Mail来代替System.Web.Mail

     

     

    10.2 如何通过使用System.Net.Mail发送 emails  [回到顶端]

     

    CODE-BEHIND:

    MailMessage message = new MailMessage();

    message.From = new MailAddress("fromusername@DomainName");

    message.To.Add(new MailAddress("tousername@DomainName"));

    message.CC.Add(new MailAddress("ccusername@DomainName"));

    message.Subject = "Subject";

    message.Body = "Content";

    SmtpClient client = new SmtpClient();

    client.Send(message);

     

    web.config:

    <system.net>

        <mailSettings>

            <smtp from="username@DomainName">

                <network host="SMTPServerName" port="25" userName="username" password="secret" defaultCredentials="true" />

            </smtp>

        </mailSettings>

    </system.net>

     

    相关帖子:

    http://forums.asp.net/t/971802.aspx

     

     

    10.3 如何配置SMTP服务器?  [回到顶端]

     

    IIS为例,请查阅下面的链接:

    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/56c94d38-b10f-4a1b-a1cd-3714387a042a.mspx?mfr=true

    http://www.codeproject.com/KB/winsdk/ConfigServerSmtp.aspx

     

     

    10.4 如何用Gmail服务器发送email  [回到顶端]

     

    请首先阅读FAQ “How to send email by using System.Net.Mail?”。请注意当配置接下来的设置时你需要知道下面几点:

    ·SMTP服务器名

    ·端口号

    ·SSL认证

     

    Gmail SMTP 服务器名是“smpt.gmail.com”;

    Gmail 端口是465, 并非默认端口25;

    SSL 认证应当设置为true;

     

    因此通过Gmail成功发送邮件的秘诀是:端口465,服务器名“smtp.gmail.com”SSL = true

     

    相关贴子:

    http://forums.asp.net/p/1167140/1944223.aspx

    http://forums.asp.net/p/1234241/2235990.aspx

     

    2009年7月13日 13:56
  •   

    1.8 如何检测用户是否在线或离线?   [回到顶端]

     

    许多开发者趋向于使用‘Session_End’ 事件标记一个用户‘Offline’,但这并不是一个好主意,因为在ASP.Net session 和用户之间并不是一一对应的,例如如果一个用户在他的工作站打开Internet Explorer的两个单独的实例(. 2个单独的 IE 进程),他可以有2 ASP.Net sessions 。任何一个session ‘Session_End’事件并不是必然意味着用户offline,他仍然可以使用website

     

    另外,‘Session_End’事件只能在‘InProc’ session模式可用。如果你在State Server SQL Server设法存储session状态,‘Session_End’将永远不会触发。

     

    我更愿意建议使用最近访问时间作为理想的方法。

     

    Membership 帮助生成用户数据库,并且可以通过Membership.GetUser(string userName).IsOnline 方法方便地获得它。

     

    如果你没有使用Membership,你可以使用下面同Membership中相同原理的方法:

    1. 在应用程序中,你可以定义全局目录membershipDictionary去存储关于用户在线和离线的信息。

    2. 在页面中使用AJAX Timer (或者客户端JavaScript中的简单XmlHttpRequest )更新用户的LastVisitTime并以一定的间隔存储到 membershipDictionary

    3. 不时地访问目录去过滤掉空闲的用户(那些一段时间没有访问页面)并提取有多少用户依然在线。定期的维护可以在单独的线程或基于服务器的timer中做。请同时注意线程同步问题。

     

    相关主题http://forums.asp.net/t/1204142/2107795.aspx 

     

     

    1.9 如何插入特殊的非ASCII字符到数据库?  [回到顶端]

      

    当你设法插入一个非ASCII字符到数据库时,如‘Poor’s’, 你发现它们不能通过使用“INSERT INTO table VALUES(1,’Poor’s’)” 插入, 仅仅 “Poora€?s”可以被插入。

     

    你可以插入值作为参数到数据库。

    InsertCon.Open();

    SqlCommand InsertCmd = new SqlCommand("INSERT INTO table VALUES (1,@name)", InsertCon);

    InsertCmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar,200));

    InsertCmd.Parameters["@name"].Value = TextBox1.Text; //Assume the input is validated and legal.

    InsertCmd.ExecuteNonQuery();

    InsertCon.Close();

      

    使用这种方法同时可以避免潜在的SQL注入攻击。

     

    相关主题: http://forums.asp.net/p/1241151/2270935.aspx#2270935

      

      

    1.10 如何在页面间传递数据?   [回到顶端]

     

    这儿有几种方法可以以在页面间传递数据:

     

    Query Strings: 你可以用query strings在页面间传递数据,数据将作为参数在URL 中显示。有时你想去编码参数,这可以用HttpServerUtility.UrlEncode HttpUtility.UrlEncode去完成。

     

    例如:

    page1, 你可以通过重定向传递数据到其它页面:

    Response.Redirect("Page2.aspx?parameter=" + TextBox1.Text);

    page2, 你可以使用QueryString["parameter"] page1获得数据。

    string str = Request.QueryString["parameter"];

      

    Cookies: Cookies可以在客户端机器上被存储。如果你没有设置cookie的到期,cookie将被创建但不会在用户的硬盘中保存。 相反,cookie将作为用户session信息的一部分被维护。当用户关闭浏览器或session 到期,cookie将被丢弃。

     

    你可以以几种方式添加cookiesResponse.Cookies集合,下面的例子展示了两种方法:

    Response.Cookies["userName"].Value = "mike";

    Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);

    HttpCookie aCookie = new HttpCookie("lastVisit");

    aCookie.Value = DateTime.Now.ToString();

    aCookie.Expires = DateTime.Now.AddDays(1);

    Response.Cookies.Add(aCookie);

      

    你可以从此链接获得更多细节: http://msdn.microsoft.com/en-us/library/aa289495.aspx

      

    Session变量: session在服务器内存中保存,并且对某一客户端是唯一的。

     

    例如:

    Page1存储数据到session:

    Session["userName"] = "mike";

    Page2提取数据:

    Session["userName"].ToString();

      

    Server.Transfer:

    Server.Transfer发送所有已经被组装好的信息经过一个页面到另一个页面去处理。IE上的URL将不会改变。

      

    例如:

    page1,你可以使用‘transfer’ 去发送page1中的所有信息到page2

    Server.Transfer("Page2.aspx", true);

    接着你可以在Page_Load中使用下面的代码去提取来自于page 1TextBox1的值。

    Response.Write(Request.Form["TextBox1"]);

      

    通过此链接你可以得到更多信息: http://msdn.microsoft.com/en-us/library/ms525800.aspx and ASP.NET State Management Overview.

      

    相关主题: http://forums.asp.net/t/1208146/2124069.aspx

      

      

    1.11 如何在浏览器中隐藏URL参数?  [回到顶端]

      

    这有三种方式可以实现:

     

    1. 使用Server.Transfer

    当你通过Server.Transfer("sample2.aspx?x=1&y=2") 传递URL, page2中,你可以通过Request提取这两个变量的值,但是它将会显示前一个执行Server.Transfer的页面的URL

     

    参考:

    http://msdn2.microsoft.com/en-us/library/ms525800.aspx

    http://support.microsoft.com/kb/219294

      

    2. 如果你加密QueryString,那么真实的string 将不会在URL中显示:

    请核对 问题1.7.

     

    3. URL重写:

    你可以通过链接获得更多信息http://www.codeproject.com/KB/aspnet/urlrewriter.aspx.

      

    相关主题: http://forums.asp.net/t/1204609/2109602.aspx

      

      

    1.12 如何下载文件?  [回到顶端] 

      

    请检查如下实例代码,页面‘link.aspx’列出了所有文件夹中可获得的文件,当点击‘link.aspx’中的超链接时,用户可以通过‘downloading.aspx’下载文件。

     

    link.aspx:

    using System.IO;

     

    protected void Page_Load(object sender, EventArgs e)

    {

        DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/downloadstuff"));

        int i = 0;

        foreach(FileInfo fi in di.GetFiles())

        {

            HyperLink HL = new HyperLink();

            HL.ID = "HyperLink" + i++;

            HL.Text = fi.Name;

            HL.NavigateUrl = "downloading.aspx?file="+fi.Name;

            Page.Controls.Add(HL);

            Page.Controls.Add(new LiteralControl("&lt;br/>"));  

        }

    }

      

    downloading.aspx:

    using System.IO;

    using System.Threading;

     

    protected void Page_Load(object sender, EventArgs e)

    {

        string filename = Request["file"].ToString();

        fileDownload(filename, Server.MapPath("~/downloadstuff/"+filename));

    }

     

    private void fileDownload(string fileName, string fileUrl)

    {

        Response.Clear();

        bool success = ResponseFile(Page.Request, Page.Response, fileName, fileUrl, 1024000);

        if (!success)

            Response.Write("Downloading Error!");

        Response.End();

    }

     

    public bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullUrl, long _speed)

    {

        try

        {

            FileStream myFile = new FileStream(_fullUrl, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            BinaryReader br = new BinaryReader(myFile);

            try

            {

                _Response.AddHeader("Accept-Ranges", "bytes");

                _Response.Buffer = false;

                long fileLength = myFile.Length;

                long startBytes = 0;

                int pack = 10240; //10K bytes

                int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1;

                if (_Request.Headers["Range"] != null)

                {

                    _Response.StatusCode = 206;

                    string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });

                    startBytes = Convert.ToInt64(range[1]);

                }

                _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());

                if (startBytes != 0)

                {

                    _Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));

                }

                _Response.AddHeader("Connection", "Keep-Alive");

                _Response.ContentType = "application/octet-stream";

                _Response.AddHeader("Content-Disposition", "attachment;filename="

                                    + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

                br.BaseStream.Seek(startBytes, SeekOrigin.Begin);

                int maxCount = (int)Math.Floor((double)((fileLength - startBytes) / pack)) + 1;

                for (int i = 0; i < maxCount; i++)

                {

                    if (_Response.IsClientConnected)

                    {

                        _Response.BinaryWrite(br.ReadBytes(pack));

                        Thread.Sleep(sleep);

                    }

                    else

                    {

                        i = maxCount;

                    }

                }

            }

            catch

            {

                return false;

            }

            finally

            {

                br.Close();

                myFile.Close();

            }

        }

        catch

        {

            return false;

        }

        return true;

    }

      

    相关主题: http://forums.asp.net/p/1204802/2109808.aspx#2109808

      

      

    1.13 <%# %> <%= %>之间的不同是什么?  [回到顶端]

     

    <%# %>用于数据绑定,然而<%= %>用于表达式输出结果。仅当调用页面或控件的DataBind 方法时,<%# %>中的表达式将被执行。当<%= %>出现在页面上时,其中的表达式将被执行和呈现。

     

    2009年7月13日 14:01
  •  

    2. 发送邮件  [回到顶端]

     

    2.1 ‘System.Net.Mail’ ‘System.Web.Mail’之间的不同是什么?   [回到顶端]

     

    System.Web.Mail and System.Net.Mail 都是微软在.NET framework中提供的内建的库。此时,System.Web.Mail被所有版本的.Net Frameworks 支持。然而, System.Web.Mail自从.Net 2.0后就开始废弃了,将来有可能从类库中移除。在.Net 2.0中,新的‘System.Net.Mail’ 命名空间被引进,如果你开发的应用程序目标是.Net 2.0或以后版本,推荐不用‘System.Web.Mail’

     

     

    2.2 如何发送邮件?  [回到顶端]

      

    你可以使用‘System.Net.Mail’发送邮件。

      

    隐藏代码:

    Using System.Net.Mail;

     

    public void SendEmail(string from, string to, string bcc, string cc, string subject, string body)

    {

        try

        {  

            MailMessage NewEmail = new MailMessage();

            NewEmail.From = new MailAddress(from);

            NewEmail.To.Add(new MailAddress(to));

            if (!String.IsNullOrEmpty(bcc))

            {

                NewEmail.Bcc.Add(new MailAddress(bcc));

            }

            if (!String.IsNullOrEmpty(cc))

            {

                NewEmail.CC.Add(new MailAddress(cc));

            }

            NewEmail.Subject = subject;

            NewEmail.Body = body;

            NewEmail.IsBodyHtml = true;

            SmtpClient mSmtpClient = new SmtpClient();

            // Send the mail message

            mSmtpClient.Send(NewEmail);

            this.Label1.Text = "Email sent successful.";

        }

        catch

        {

            this.Label1.Text = "Email sent failed";

        }

    }

     

    protected void Button1_Click(object sender, EventArgs e)

    {

        string from = "sender address";// like username@server.com

        string to = TextBox1.Text; //Recipient address.

        string bcc = "";

        string cc = "";

        string subject = "text";

        string body = "text";

        SendEmail(from, to, bcc, cc, subject, body);

    Web.Config:

    <system.net>

      <mailSettings>

        <smtp>

          <network host="your stmp server" port="25" userName="your from email" password="your password"/>

        </smtp>

      </mailSettings>

    </system.net>

      

    相关主题: http://forums.asp.net/t/1207868/2121765.aspx

      

    2.3 为何在设法发送时SMTP Mails不能工作?   [回到顶端]

     

    1. 如果你正在in .Net 2.x 或以后版本使用stem.Web.Mail 命名空间,你可以尽量使用System.Net.Mail 代替。

    2. 请确保’From Email Address’, password, ’To Email Address’, SMTP 服务器和服务器端口正确。

    3. 请检查SMTP的配置,并且通过配置IIS启动默认的SMTP 虚拟服务器: http://forums.asp.net/t/1214374.aspx

    4. Yahoo Hotmail 并不支持 SMTP: http://forums.asp.net/t/1212160/2144153.aspx

     

      

    3.GridView

     

    3.1如何在GridView中获得包含点击事件的行的索引?  [回到顶端]

     

    可以通过使用CommandName属性和GridView控件的RowCommand事件来实现。

     

    为了得到GridView 中包含点击控件行的索引,你可以尝试下面的方法。

      

    1.ImageButton中定义属性CommandName: CommandName="display"

    <asp:TemplateField>

    <ItemTemplate>

    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# Eval("ImageUrl", "~/images/stock/{0}") %>'  Height="120px"

           CommandName="display" Width="160px"/>

    </ItemTemplate>

    </asp:TemplateField> 

      

    2. 在事件RowDataBound, 传递行的索引到ImageButton CommandArgument.

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

           ImageButton imgBut = ((ImageButton)e.Row.Cells[1].Controls[1]);

           imgBut.CommandArgument = e.Row.RowIndex.ToString();

        }

      

    3. 使用RowCommand事件去执行ImageButtonclick事件, 接着你可以获得正在点击的ImageButton的索引。

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

    {

        int rowIndex;

        if (e.CommandName == "display")

        {

            rowIndex = Convert.ToInt32(e.CommandArgument); //The index of ImageButton you click.

            string ID = GridView1.DataKeys[rowIndex].ToString();

            Response.Redirect("view_stock_item.aspx?StockID=" + ID);

        }

    }

      

    不要忘记定义GridViewOnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound"

      

    相关主题: http://forums.asp.net/t/1222400/2189246.aspx

      

      

    4. Membership  [回到顶端]

     

    4.1如何部署自定义Membership数据库?  [回到顶端]

     

    请使用‘aspnet_regsql.exe’ 去部署membership 数据库并在‘Web.Config’中设置Provider。你可以了解在ASP.NET 2.0中如何执行membership: http://www.asp.net/learn/moving-to-asp.net-2.0/module-08.aspx。 你同时可以在此找到关于执行自定义Membership User How to: Implement a Custom Membership User的详细步骤。

     

     

    2009年7月13日 14:02
  •  

    6.如何用读取POOM的信息,比如:联系人,约会和任务  [回到顶端]

      

    我们可以用‘IPOutlookApp: GetDefaultFolder’得到contact folder。一旦我们得到了contact folder,我们可以IFolder:get_Items方法得到这个目录下所有项目,下面的代码是是刚讲的方法来读取联系人的信息。读取约会和任务信息,也是类似的方法。只是要取它们自己的folder: appointment folder, task folder.

     

    void CPoomViewTestDlg::OnBnClickedButton1()

    {

      // TODO: Add your control notification handler code here

     

     

      IPOutlookApp * m_Outlook;

     

    //hr=CoCreateInstance(CLSID_Application,NULL,CLSCTX_INPROC_SERVER,IID_IPOutlookApp,reinterpret_cast<void **>(&m_Outlook));

     

      HRESULT hr = CoCreateInstance(CLSID_Application,

                          NULL,

                          CLSCTX_INPROC_SERVER,

                          IID_IPOutlookApp,

                          (LPVOID*)&m_Outlook);

       hr = CoCreateInstance(_uuidof(Application),

                          NULL,

                          CLSCTX_INPROC_SERVER,

                          _uuidof(IPOutlookApp),

                          (LPVOID*)&m_Outlook);

     

     

      m_Outlook->Logon(NULL);

     

      //Search contact only

      IFolder * pFolder=NULL;

      IPOutlookItemCollection *ipItemCollection=NULL;

      m_Outlook->GetDefaultFolder(OlDefaultFolders::olFolderContacts,&pFolder);

     

      int count=0;

      BSTR firstname;

      BSTR lastname;

      if(pFolder)

      {

          pFolder->get_Items(&ipItemCollection);

          if(ipItemCollection)

          {

             ipItemCollection->get_Count(&count);

     

     

             //enumerate all contacts

             for(int i=1;i<=count;i++)

             {

                 IContact *pconApp;

                 ipItemCollection->Item(i,reinterpret_cast<IDispatch**>(&pconApp));

                 pconApp->get_FirstName(&firstname);

                 pconApp->get_LastName(&lastname);

     

                 pconApp->Release();

                 pconApp=NULL;

             }

     

             ipItemCollection->Release();

             ipItemCollection=NULL;

          }

          pFolder->Release();

          pFolder=NULL;

            

         m_Outlook->Release();

         m_Outlook=NULL;

     

       }

    }

      

    相关的问题:

    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/e04e6408-03b7-4fc9-8393-bbb2d6167aa9/

    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/575c7178-dd95-43b6-9595-0791d7f0a0ea/

     

    2009年7月13日 14:06
  •  

    7.如何控件设备的背光  [回到顶端]

     

    没有标准的API来控件Windows Mobile 设备的背光,这是由OEM自己实现的,但是对于一些设备,我们可以通过修改注册表来控制背光。

      

    背光的注册表路径:

     KEY: HKEY_CURRENT_USER\ControlPanel\BackLight \acBrightness

     

    我们只修改这个值,就可以改变背光的强弱。

     

    注意:修改注册表信息能改变背光的强弱,有些设备需要重启来能改变背光的调整。

     

    相关的问题:

    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/fe8d1f61-686b-4f67-a127-44952ce9837b/

    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/e73b2ca8-dc45-4bec-a35f-5c52865a6920/

     

    2009年7月13日 14:20
  •   

    1. 工具包的最新二进制安装包  [回到顶端]

      

    1.1 如何获得最新版本的工具包?  [回到顶端]

      

    现在我们没有固定的发布日期,我们希望保持非常快速的发布ASP.NET AJAX Control Toolkit,并且大约一月一次的提供包括新控件,改错等的更新。我们朝着在CodePlex.com上完全透明的开发模型前进,在CodePlex.com上完整的源代码和每日迁入都可被浏览或下载。现在我们完全寄宿在CodePlex,我们在/span>span>frequent basis定期发布"Last Known Good"(大约每1-2周),偶尔有更多测试的"releases"(大约每一个月),你可以在这儿查到最新发布。

     

     

    1.2安装错误   [回到顶端]

      

    ASP.NET AJAX Control Toolkit的安装过程非常简单,解压文件到指定目录,接着启动本地网络服务器开始范例网站,如果你从远端得到它并且使用Toolkit有问题,确保正确设置你的环境,如果有其它问题,请把它们张贴到论坛,我们将帮助你解决它们。

     

    相关主题:
    错误安装
    不能安装toolkit
    ASP.NET AJAX Control Toolkit

     

     

    1.3 如何利用工具包升级现有网站?   [回到顶端]

      

    大多数情况下,可通过新的去替换老版本的程序集来进行无缝更新。

     

    2009年7月13日 14:42
  •   

    2. 基本用法   [回到顶端]

      

    2.1 浏览器兼容性   [回到顶端]

      

    当使用Toolkit时,你可能会遇到在浏览器YYY下控件XXX不能正常工作。同时这些早期版本在所有浏览器中不能完美工作,我们希望最终提供一定程度的支持对把ASP.NET AJAX作为目标的所有浏览器中的每个控件,目前ASP.NET AJAX正欲支持IE, Firefox, and Safari

     

    相关主题:
    FYI: how cross browser are the Toolkit components
    I tried the toolkit from your sample site with ...

     

     

    2.2 动态创建控件  [回到顶端]

     

    请参阅问题如何如何编程创建ModalPopup?”

     

    相关主题:
    Creating Atlas Controls
    Creating DragPanel dynamicly
    Collapsible Panel Behaviour
    Dynamically Create Controls and Extendersspan>

     

     

    2.3 如果我不使用ASP.NET能否利用脚本?  [回到顶端]

     

    是的是的。只要控件不需要任何服务器端代码去运行,大部分控件仅仅使用服务器端代码去自动绑定它们到页面中的服务器控件。其它少数控件,尤其是ReoderList,实际上作为服务器控件被执行,因为它们做了很多在服务器上的工作且不会频繁地移植到其它平台。所以脚本要求在ASP.NET AJAX上面去运行,Shanku Niyogi为那些期望在span>ASP.NET之外运行ASP.NET AJAX的人张贴了一个关于using ASP.NET AJAX with PHP的例子。

     

     

    2.4 为何没有VB.NET的样例?  [回到顶端]

      

     

    如果你是一个VB.net开发者且对于理解C#事例有困难,请别犹豫发贴到论坛,我们将非常乐意去帮助你。

     

    相关主题:
    CaCascading Dropdown List VB error
    CascadingDropDowns in VB
    CascadingDropDown Problems......

     

     

    2.5 对扩展器 ‘ABC’ 不能创建ID为 ‘XYZ’ 的目标控件  [回到顶端]

     。

    扩展器必须和它的目标控件位于相同的命名容器中,这个错误当数据绑定是尤其常见。 解决它的最容易方法是移动扩展器到和控件相同的命名容器(NamingContainer),然而对更高级的场景,你可以处理允许你提供一个对页面上的任何控件的引用的ResolveControlID事件(先前称为ResolveTargetControlID)。详细资料参考 extender base classes documentation, ExtenderBase.cs自动化测试的示例代码

     

    相关主题:
    Target control with ID 'TextBox1' could not be found for extender !?!
    Error using the PopupControlExtender control when referencing controls that are contained within another control...
    Multiple PopupControlProperties?

     

     

    2.6 为何得到错误:” Sys.InvalidOperationException: 具有相同ID ‘****’的两个组件不能被添加到应用程序”?  [回到顶端]

     

     

    这通常在使用Data presentation controls时发生(GridView, DataList, etc),如果有一个具有确定BehaviorIDExtender位于模板中时,它的多个实例将生成。因此,异常发生。

     

    相关主题:
    http://forums.asp.net/t/1127745.aspx

     

      

      

     

     

    2.8 在客户端操纵扩展器(Ajax Extender  [回到顶端]

      

     

    关键是我们需要得到该对象的引用。AJAX 库已经提供了$find函数去实现它。首先,我们需要分配BehaviorID 给我们希望在服务器端操纵的extender。接着,在客户端用$find(“behaviorid”)获得它,然后,我们可以调用对象的任何方法去完成我们的要求

      

    相关主题: :
    Referencing CollapsiblePanelExtender in jscript
    cascadingdropdown add client-side clear label how?

     

     

    2.9 能否在客户端动态改变属性的值?  [回到顶端]

      

      

    1.get_开始的方法意味着将返回extender 的一个属性。

    2.set_开始的方法意味着它可以被用来设置extender 的属性的值。

    3.add_开始的方法意味着他可以被用来添加extender 的事件处理程序,并且应该具有你所定义的函数的参数。例如:你可以调用add_showing去添加ModalPopupExtender的事件处理程序,在弹出显示之前函数将被调用。

    4.remove_开始的方法意味着他可以用于移除已注册的事件处理程序。

    5._开始的方法意味着它是受保护或私有方法,并且它不被推荐直接使用。

     

     

    2.10 如何在客户端获得 或设置控件的位置?   [回到顶端]

      

     

    例如:

     

    //通过 $get() 方法获得DOM 元素。 
    var el = $get('<%=Panel1.ClientID%>');   
    //得到它的位置。  
    var newLocation = $common.getLocation(el); 

     

    设置它的位置:

     

    //创建创建新的位置
    var newLocation = new Sys.UI.Point(x-position,y-position);
    //移动Panel到目标.
    $common.setLocation(Panel, newLocation); 
     

    有时,控件关联到扩展器并且扩展器包含公共方法去设置控件的位置,例如,如果Panel 关联到DragPanelExtender,我们同样可以使用$find('DragPanel.BehaviorID').set_location(newLocation)

      

    相关主题:
    http://forums.asp.net/t/1154072.aspx

     

     

    2.11 z-次序问题  [回到顶端]

     

    由于浏览器该如何呈现他们,许多HTML输入控件( <select>)并没有同z-Ordering协调协调工作。这引起一些控件,如ModalPopup,有输入控件在动态定位的内容上面显示。更多信息,请参考 http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q177378

     

    相关主题:
    ListBox and DragPanelExtender
    ModalPopup and <SELECT>

     

     

    2.12 扩展器指向EditItemTemplate中的控件时没有加载脚本  [回到顶端]

      

    当使用extender 去指向属于数据绑定控件的结合UpdatePanelEditItemTemplate内部的control时,你可能遇到"Assertion Failed: Unrecognized tag AtlasControlExtender:MyExtender" 错误信息 ,要解决此问题,仅通过在页面的其它地方放置一个没有extender 属性的extender强迫下载脚本。例如, 添加<ajaxtoolkit:MyExtender id="me" runat="server />

      

     

    相关主题:
    Assertion Failed: Unrecognized tag AtlasControlExtender:ValidationScript
    BUG - NumericUpDownExtender in Gridview EditItemTemplate

    在客户端获得当前Panel的位置,我们可以使用$c$common.getLocation(DOM Element)函数。

    Microsoft AJAX 库提供了在客户端操作HTML元素的一套工具,包括获得或设置元素的位置。

    我们可以下载ControlToolkit的源代码通过查看它的js 文件去查找我们在span>Extender中已定义的方法,通常有如下命名规则:

    是的是的,大部分AJAX ControlToolkit 中的extenders都提供了一系列的方法允许我们去操作。

    Extender 同样在客户端有对象模型。我们能够在表示它的对象上调用方法去得到期望行为,例如:我们可以调用show方法使modalPopupExtender可见。

    这个主题详细的描述了如何通过JavaScript执行PostBack,类似ReorderList的方式。

    2.7如何通过JavaScript强制回传?   [回到顶端]

    你可能得到这个错误当在页面上存在具有相同BehaviorID的超过一个的Extender时。
    页面上的所以组件在内部array中维护,当有新的组件要被添加时,它的ID将根据array去核对看是否已经被占用,如果那儿已经存在,异常将被抛出。

    前版本的Toolkit仅附带C#代码事例,Visual Studio templatesC#VB.NET交付Toolkit

    我们选择用C#Toolkit本身时,同时伴随事例页,尽管如此,大多数情况下主要代码确实是有相当简单的C# VB.NET代码片段的JavaScript

    2009年7月13日 14:48