`
wangyihust
  • 浏览: 433663 次
文章分类
社区版块
存档分类
最新评论

Create a AJAX enabled WebPart for SharePoint2007 by using ASP.NET 2.0 client callback feature

阅读更多
Create a AJAX enabled WebPart for SharePoint2007 by using ASP.NET 2.0 client callback feature

I tried to integrate Atlas into WebPart a couple of days ago but failed. Atlas is a great AJAX framework from Microsoft, but it isn't compatible with SharePoint 2007 for now, what a pity.

But your customers always have this kind of complain, "The page will fully reload when I just click one button in the WebPart, I just wanna perform a very simple action but I have to wait until the page load complete." So, how can you handle this?

As you've known, there is a built-in feature called client callback in ASP.NET 2.0, which allows you call server method from client side without causing the page refresh, and SharePoint2007 is built upon ASP.NET 2.0 framework, so we can use this feature to support AJAX in WebPart.

In the following steps, I'm gonna show you how to get server date from client in a WebPart.
[If you are not familiar with Client Callback feature in ASP.NET 2.0 yet, I strongly recommend you read this article first]

1. Start up VS.NET 2005 and create a Class Library project.

2. Add System.Web.dll to the project reference.

3. Create a Class with a name you expect, which inherit from System.Web.UI.WebControls.WebParts.WebPart and implement System.Web.UI.ICallbackEventHandler interface.

4. Override CreateChildControls to create some controls.

5. Override OnLoad to regist related JavaScript to client.

6. Override RenderContents or Render to render WebPart to browser.

7. Implement ICallbackEventHandler members.

The source code is here:

using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;

namespace SPS2007.Research.WebParts
{
    
public class AjaxPart : WebPart, ICallbackEventHandler
    
{
        
private string strCallResult;
        
private HtmlInputText tbResult;
        
private HtmlButton btnCall;

        
public AjaxPart()
        
{
            
        }


        
protected override void CreateChildControls()
        
{
            
base.CreateChildControls();

            tbResult 
= new HtmlInputText();
            tbResult.ID 
= "myTextBox";
            btnCall 
= new HtmlButton();
            btnCall.InnerText 
= "GetServerDate";
            btnCall.Attributes.Add(
"OnClick""javascript:InvokeMethod();");
            
this.Controls.Add(tbResult);
            
this.Controls.Add(btnCall);
        }


        
protected override void OnLoad(EventArgs e)
        
{
            
if ((this.Page != null&& !this.Page.IsCallback)
            
{
                ClientScriptManager scriptManager 
= this.Page.ClientScript;

                
string eventRef = scriptManager.GetCallbackEventReference(this"argVal""OnCallComplete""ctxVal""OnErrorOccurs"true);

                StringBuilder sb 
= new StringBuilder();

                sb.Append(
"function InvokeMethod(argVal,ctxVal)");
                sb.Append(Environment.NewLine);
                sb.Append(
"{");
                sb.Append(Environment.NewLine);
                sb.Append(eventRef);
                sb.Append(Environment.NewLine);
                sb.Append(
"}");
                sb.Append(Environment.NewLine);

                HtmlInputText textBox 
= this.FindControl("myTextBox"as HtmlInputText;

                sb.Append(
"function OnCallComplete(result,context)");
                sb.Append(Environment.NewLine);
                sb.Append(
"{");
                sb.Append(Environment.NewLine);
                sb.Append(
"document.getElementById(\"" + textBox.ClientID + "\").value = result;");
                sb.Append(Environment.NewLine);
                sb.Append(
"}");
                sb.Append(Environment.NewLine);

                sb.Append(
"function OnErrorOccurs(err)");
                sb.Append(Environment.NewLine);
                sb.Append(
"{");
                sb.Append(Environment.NewLine);
                sb.Append(
"window.status = err;");
                sb.Append(Environment.NewLine);
                sb.Append(
"}");
                sb.Append(Environment.NewLine);

                scriptManager.RegisterClientScriptBlock(
base.GetType(), "CallBackScript", sb.ToString(), true);
                
base.OnLoad(e);
            }

        }


        
protected override void RenderContents(HtmlTextWriter writer)
        
{
            EnsureChildControls();
            tbResult.RenderControl(writer);
            btnCall.RenderControl(writer);
        }


        
protected string GetDateTime()
        
{
            
return DateTime.Now.ToString("MM/dd/yyyy");
        }


        
Implement ICallbackEventHandler Members#region Implement ICallbackEventHandler Members

        
public string GetCallbackResult()
        
{
            
return strCallResult;
        }


        
public void RaiseCallbackEvent(string eventArgument)
        
{
            strCallResult 
= GetDateTime();
        }


        
#endregion

    }

}

Okay, That's it, you can compile the project and deploy your WebPart to sharepoint site. I will give you the instructions about how to deploy a web part if you don't know that.

1. Copy compiled assembly to C:\Inetpub\wwwroot\wss\VirtualDirectories\80\_app_bin, notice that 80 is the virtual directory related to your wss site, you can find the name from IIS MMC.

2. Modify the web.config file under C:\Inetpub\wwwroot\wss\VirtualDirectories\80 directory, add below line to SafeControls section:

<SafeControl Assembly="SPS2007.Research.WebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="SPS2007.Research.WebParts" TypeName="*" />

You probably need to change Assembly and Namespace to accord with your assembly.

3. Execute IISRESET under command line.

4. Then go to Site Settings -> Web parts, click 【New】go to the New Web Parts page, find your web part, click 【Populate Gallery】, after that you can add your web part to a page when you edit a page. 

原文:http://fengzhimei.cnblogs.com/archive/2006/05/26/410032.html



分享到:
评论

相关推荐

    asp.net 2.0 webpart in action

    ASP.NET 2.0 WebParts 是微软开发框架中一个强大的特性,它允许用户自定义和交互式地构建动态网页内容。WebParts 提供了一个可扩展的框架,用于创建高度个性化和交互式的Web应用程序,尤其适合企业级应用和门户站点...

    ASP.NET2.0全程指南

    尽管ASP.NET 2.0本身并不包含完整的AJAX框架,但微软通过Atlas(后来发展为ASP.NET AJAX)扩展了对部分AJAX功能的支持,使开发者可以创建部分页面刷新的应用,提高用户体验。 八、WebParts WebParts是ASP.NET 2.0中...

    Asp.net 2.0模块三

    Asp.NET 2.0通过AJAX技术实现了Partial Postback,提高了用户体验,减少了不必要的页面刷新。 10. **WebParts**:WebParts允许用户在运行时自定义和交互网页内容。用户可以添加、删除、移动、配置WebPart控件,增强...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    ASP.NET 2.0+SQL Server 2005全程指南 目录 基础篇 第1章 ASP.NET概述及环境配置 1.1 认识ASRNET 1.1.1 .NET Framework框架 1.1.2 ASP.NET功能与特性 1.1.3 ASP.NET与ASP的区别 1.2 搭建ASP.NET开发环境 1.2.1...

    ASP.NET 2.0快速入门(8):ASP.NET 2.0 web part

    ASP.NET 2.0是微软推出的用于构建动态网站和Web应用程序的框架,它极大地简化了Web开发过程。在这一部分的教程中,我们将专注于ASP.NET 2.0的Web Part功能,这是一种强大的组件化开发技术,它允许用户自定义和交互...

    ASP .NET2.0

    7. **AJAX支持**:虽然ASP.NET 2.0本身并未内置Ajax支持,但Microsoft推出了一个名为Atlas的预览版,它是后来ASP.NET AJAX的基础,允许开发者创建部分页面刷新的应用程序,提高了用户体验。 8. **配置管理工具**:...

    在asp.net 2.0中使用WebParts

    【在ASP.NET 2.0中使用WebParts】 ASP.NET 2.0引入了一项强大的功能,即WebParts,它允许用户自定义和交互网页内容。WebParts为开发者提供了构建高度可配置和交互式Web应用程序的框架。在这个系统中,用户可以动态...

    ASP_NET 2_0动态网站开发教程(2)

    8. **AJAX支持**: 虽然ASP.NET 2.0本身并不直接包含Ajax功能,但通过Microsoft的Atlas框架(后来发展为ASP.NET AJAX),开发者能够实现部分页面刷新和异步通信,提升用户体验。 9. **WebParts**: WebParts是ASP.NET...

    SharePoint AJAX webpart

    SharePoint AJAX WebPart是开发SharePoint应用程序时常用的一种技术,它允许用户在不刷新整个页面的情况下更新部分网页内容,提供更流畅的用户体验。这个自定义的SharePoint.Ajax.Library是为了解决SharePoint内置...

    ASP.NET MVC框架下的Webpart插件开发

    ASP.NET MVC框架下的Webpart/Portlet插件开发是一种构建动态、可定制Web界面的方法。Webparts(或Portlets)是独立的、可重用的组件,它们可以被用户根据个人喜好在页面上自由排列和配置。在ASP.NET MVC中实现这一...

    ASP.NET中webPart例程(源码)

    ASP.NET中的WebPart技术是构建动态、可交互的网页用户界面的一种强大工具,它允许开发者将复杂的网页功能拆分成独立的、可重用的部件,这些部件称为WebPart。本例程提供了对WebPart的基本操作,包括关闭和重新打开...

    ASP.NET与AJAX深度剖析范例集_卷2(源代码)

    ASP.NET与AJAX深度剖析范例集 的随书代码 书的目录如下: 目录 第1章 构建自己的网站 第2章 Visual Studio 2005的重要改变 第3章 ASP.NET 2.0新功能剖析 第4章 数据库访问机制的重大变革 第5章...

    SharePoint WebPart 用户控件包装器

    **用户控件包装器**是一种辅助 SharePoint 开发者的工具,它能显著简化将 ASP.NET 用户控件转换为可在 SharePoint Portal Server 2003 或 Windows SharePoint Services 2.0 中使用的 WebPart 的过程。通过这种方式,...

    Asp.net2005 WebPart 的示例.rar

    ASP.NET 2005 WebPart 是微软在.NET Framework 2.0版本中引入的一个强大功能,用于构建高度可定制和交互式的Web应用程序。WebPart技术允许开发者将网站的各个功能模块化,使得用户可以根据自己的需求自由组合和配置...

    ASP.NET 绝对居中弹出层

    ASP.NET绝对居中弹出层是一种常见的Web应用交互设计,常用于显示重要的信息或进行用户交互,如登录对话框、消息提示或表单提交。在ASP.NET框架中,结合JavaScript和CSS,我们可以创建一个高性能、高用户体验的弹出...

    asp.net高级教程 PPT

    ASP.NET2.0的安全性是构建可靠Web应用的基础。它包括身份验证(Authentication)和授权(Authorization)两部分。身份验证确保只有合法用户可以访问应用,常见的方法有Windows、Forms、Passport等。授权则控制不同...

    ASP.NET知识小结(个人经验总结)

    WebPart是ASP.NET 2.0引入的一个特性,主要用于构建可重用、可配置和可组合的Web部件。WebPart允许用户根据需求动态添加、删除和配置页面上的组件。例如,可以创建一个新闻显示WebPart,用户可以在页面上自由移动它...

Global site tag (gtag.js) - Google Analytics