What’s this – An original post? – No way ; )
---
I’m having a play with Ajax.NET because I have some somewhat unique requirements from an application which is delivered under SharePoint.
The requirement is that a process may take 1 hour to complete and the process progress is being stored in a database which must be queried.
So what my plans to do are create a Web Part which looks in the DB for these processes and refresh and image and the UI to display progress – but all without a page refresh.
Ajax.NET is the perfect solution.
When I put the CSharpSample under /_layouts/ and make the initial call:
Ajax.Utility.RegisterTypeForAjax(typeof(WebUserControl1));
I get a cast exception.
Message: Specified cast is not valid
StackTrace: at Ajax.Utility.RegisterCommonAjax() at Ajax.Utility.RegisterTypeForAjax(Type t) at CSharpSample.WebUserControl1.Page_Load(Object sender, EventArgs e) in c:\program files\common files\microsoft shared\web server extensions\60\template\layouts\csharpsample\webusercontrol1.ascx.cs:line 20
The way around this is – don’t make the RegisterTypeForAjax call!
So you need to manually include the Ajax.NET client side references (bolded below)
<%@ ControlLanguage="c#"AutoEventWireup="false"Codebehind="WebUserControl1.ascx.cs"Inherits="CSharpSample.WebUserControl1"TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<!-- Manually Includ the Ajax JavaScript Files - Start -->
<scripttype="text/javascript"src="/_layouts/CSharpSample/csharpwrapper/common.ashx"></script>
<scripttype="text/javascript"src="/_layouts/CSharpSample/csharpwrapper/CSharpSample.WebUserControl1,CSharpSample.ashx"></script>
<!-- Manually Includ the Ajax JavaScript Files - End -->
<scriptlanguage="javascript">
function GetTime()
{
// Make the client side to server side call
var res = WebUserControl1.GetPercentageComplete();
// Get the value and set the width of the image
document.getElementById('progress1').width=res.value;
// TODO: Handle the 100% complete response (hide the table)
// Repeat the call every 1 second
setTimeout('GetTime()', 1000);
}
</script>
<tablewidth="100"style="border: solid 1px black;" cellpadding="0" cellspacing="0">
<tr>
<td><imgsrc="/_layouts/CSharpSample/images/blackpixel.gif"height="15"width="0"id="progress1"></td>
</tr>
</table>
The code behind then looks like:
[Ajax.AjaxMethod]
public int GetPercentageComplete()
{
// Go get the Percentage complete (right now just seconds)
return(System.DateTime.Now.Second);
}
Other than that – Ajax.NET looks awesome.
Now to work out how to package it all into a single web part and not under /_layouts/