惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
博客园 - 聂微东
罗磊的独立博客
W
WeLiveSecurity
博客园_首页
Scott Helme
Scott Helme
V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
Latest news
Latest news
L
Lohrmann on Cybersecurity
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
About on SuperTechFans
F
Full Disclosure
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 司徒正美
博客园 - Franky
C
CXSECURITY Database RSS Feed - CXSecurity.com
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
雷峰网
雷峰网
博客园 - 【当耐特】
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
T
Tor Project blog
V
V2EX
爱范儿
爱范儿
C
Check Point Blog
T
Threatpost
Project Zero
Project Zero
量子位
V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
I
Intezer
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - fengzhimei

The template you have chosen is invalid or cannot be found. CSS trick : text-transform Site Definition KickStart Project Transform between Hex and Dec in Javascript - fengzhimei Visual Studio 2005 Web Application Projects Template Overcome limitation of activate ActiveX control in IE "Suggested Web Parts" in SharePoint 2007 Web Part picker page. - fengzhimei Extend toolbar of HtmlEditor in SharePoint 2007 Expand querystring in URL with JavaScript Code view is missing in SharePoint Designer Beta 2 when you try to edit a WSS v3 site. MOSS2007(Beta) SDK is online. .Net Framework v2.0 built-in tools StringBuilder in Javascript Remove duplicate rows from a table Remove duplicate items from collection Programatically download file from document library. Reset VSS Admin Password Html entity encoder/decoder A nice piece of javascript to simulate Adodb Recordset.
Create a AJAX enabled WebPart for SharePoint2007 by using ASP.NET 2.0 client callback feature
fengzhimei · 2006-05-26 · via 博客园 - fengzhimei

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
    }

}

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.

o_20060526.gif