Ajax and umbraco

August 03rd, 2006

Since my last post  "Please make a comment" some people have asked how did you do that, and on the forum/mailinglist people are asking about ajax and umbraco in general.

I will try give a quick overview how I use ajax to create comments on my blog posts

First off I created a class library in Visual Studio 2003, and created a class called AjaxService.
In this class I will place all my static methods that I will call from javascript (ajax)

Here is the class without the namespace

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class AjaxService
{
	public AjaxService() {}

	// Just a test method
	[AjaxPro.AjaxMethod]
	public DateTime GetServerTime()
	{
		return DateTime.Now;
	}

	[AjaxPro.AjaxMethod]
	public static string InsertNewCommentAndGetAllCommentsAsHtml(int nodeId, string name, string email, string website, string comment)
	{
		// Get the node wich we want to add a child (comment) to
		umbraco.presentation.nodeFactory.Node node = new umbraco.presentation.nodeFactory.Node(nodeId);

		// A little security check, just to make sure people can't make comment's every where
		if (node.NodeTypeAlias != "BlogPost")
		{
			throw new Exception("You can not add new nodes under this Document Type: " + node.NodeTypeAlias);
		}

		// Getting the documenttype for a comment
		DocumentType documentType = DocumentType.GetByAlias("BlogPostComment");

		// Use the admin (user with id 0) user from umbraco to create the node
		umbraco.BusinessLogic.User user = new umbraco.BusinessLogic.User(0);

		// the new comment node should have a name
		// we use the timestamp (ISO 8601) as name so it's unique
		string commentName = DateTime.Now.ToString("s");

		// Here we are creating the new comment node/document
		Document post = Document.MakeNew(commentName, documentType, user, nodeId);

		// Setting the properties
		post.getProperty("name").Value = name;
		post.getProperty("email").Value = email;
		post.getProperty("website").Value = website;
		post.getProperty("bodyText").Value = comment;
		post.getProperty("umbracoNaviHide").Value = "1";

		// Flag the node/document for publishing
		// Hereby creating a new version, using the user
		post.Publish(user);

		umbraco.library.PublishSingleNode(post.Id);
		
		return HtmlHelper.GetCommentsAsHtml(nodeId, post.Id);
	}

	[AjaxPro.AjaxMethod]
	public static string GetCommentsAsHtml(int nodeId)
	{
		return HtmlHelper.GetCommentsAsHtml(nodeId, -1);
	}

I use the Ajax.NET Professional library to do all the magic, there is nothing ajax stuff inside the methods, this is just code using the umbraco API.
To enable the methods to use for javascript calls I have mark my methods with an AjaxMethod attribute.

Next I need to include some javascripts in my HTML for the page 

JavaScript
1
2
3
4
5
6
<script type="text/javascript" src="/ajaxpro/prototype.ashx"></script>
<script type="text/javascript" src="/ajaxpro/core.ashx"></script>
<script type="text/javascript" src="/ajaxpro/converter.ashx"></script>
<script type="text/javascript" src="/ajaxpro/CPalm.Website.AjaxService,CPalm.Website.ashx"></script>
<!-- all script above is generated by the  Ajax.NET Professional library -->
<script src="/media/comment.js" type="text/javascript"></script>

Now I can call the C# method like this

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function postComment() {
	CPalm.Website.AjaxService.InsertNewCommentAndGetAllCommentsAsHtml(1023, "Name", "Email", "http://www.cpalm.dk", "This is my comment", InsertNewCommentAndGetAllCommentsAsHtml_callback);
}

function InsertNewCommentAndGetAllCommentsAsHtml_callback(res)
{
	if (res.error != null)
	{
		alert(res.error.Message);
	}
	else
	{
		alert("The C# method returned: " + res.value);
	}
}

That's it :-)

For all the UI bling bling fade I used script.aculo.us and I also used the prototype javascript library for speeding up the javascript development.

If you wan't the whole story about my javascript (insert, preview, bling bling) look at /media/comment.js

NB this is my first post using my CPalm.WebControl.SyntaxHighlighter, soon to be featured on forum.umbraco.org :-)

[Update August 07, 2006]
This one is for Otto (Comment #3)
My HtmlHelper class

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class HtmlHelper
{
	public HtmlHelper() { }

	public static string GetHeadingAsImage(string headingText)
	{
		return "<h1><img width=\"484\" height=\"30\" src=\"/ImageGen.aspx?Text=" +
			headingText + "&amp;Width=484&amp;Height=30&amp;FontSize=18&amp;" +
			"FontColor=ffba00&amp;BgColor=333333&amp;Font=Trebuchet%20MS\" alt=\"" +
			headingText + "\" /></h1><div class=\"stripe\"></div>";
	}

	// output dates, where the day gets a st, nd or rd
	// Examples: June 07th, 2006 || January 22nd, 2006 || January 21st, 2006
	public static string GetOutPutDate(DateTime date)
	{
		string year		= date.ToString("yyyy");
		string month	= date.ToString("MMMM");
		string day		= date.ToString("dd");

		if (day.EndsWith("1"))
		{
			day += "st";
		}
		else if (day.EndsWith("2"))
		{
			day += "nd";
		}
		else if (day.EndsWith("3"))
		{
			day += "rd";
		}
		else if (day.EndsWith("4"))
		{
			// Houston, we have a problem! :-)
		}

		return month + " " + day + ", " + year;
	}

	public static string GetCommentsAsHtml(int nodeId)
	{
		return GetCommentsAsHtml(nodeId, -1);
	}

	public static string GetCommentsAsHtml(int nodeId, int markId)
	{

		umbraco.presentation.nodeFactory.Node node = new umbraco.presentation.nodeFactory.Node(nodeId);
		umbraco.presentation.nodeFactory.Nodes nodes = node.Children;

		StringBuilder sb = new StringBuilder();

		int i = 0;
		foreach (umbraco.presentation.nodeFactory.Node child in nodes)
		{
			if (child.NodeTypeAlias != "BlogPostComment")
			{
				continue; // if is not a comment, go to next child (it could be a codeexample)
			}
			i++;
			sb.Append("	<div class=\"commententry\"");
			if (child.Id == markId)
			{
				sb.Append(" id=\"lastInserted\"");
			}
			sb.Append(">");
			sb.Append("		<p class=\"author\"><a href=\"#" + i + "\" name=\"" + i + "\">#" + i + "</a> - ");
			if (child.GetProperty("website").Value != string.Empty)
			{
				sb.Append("<a href=\"" + child.GetProperty("website").Value + "\" target=\"_blank\">");
			}
			
			sb.Append(child.GetProperty("name").Value);
			
			if (child.GetProperty("website").Value != string.Empty)
			{
				sb.Append("</a>");
			}
			sb.Append(" on " + GetOutPutDate(child.CreateDate) + " " + child.CreateDate.ToString("HH:mm") + "</p>");
			string bodyText = child.GetProperty("bodyText").Value;
			bodyText = System.Web.HttpUtility.HtmlEncode(bodyText);
			bodyText = bodyText.Replace("\n", "<br>");
			sb.Append("		<div class=\"commentbody\"><p>" + bodyText + "</p></div>");
			sb.Append("	</div>");
		}
		return sb.ToString();
	}
}

 

Tags: Ajax, Umbraco

Comments

#1 - vbcbvcb on August 03rd, 2006 12:48

cvbcvb

#2 - Bernd on August 03rd, 2006 13:28

realy nice work christian!!

#3 - Otto on August 07, 2006 22:26

Nice work Christian,
I try to compile the project but the the reference to the HtmlHelper is not found, where can I find that class?

Thx for sharing your experience!

#4 - Christian Palm on August 07, 2006 22:44

Hi Otto
I have updated the post with the HtmlHelper class, please see above :-)

#5 - Otto on August 08, 2006 09:37

You'r a star Christian, million thx!!!

#6 - Jonas on August 11st, 2006 17:50

test... den her kan du godt slette :-)

#7 - Jonas on August 11st, 2006 17:51

woa! great!

#8 - Bernd Rössl on August 13rd, 2006 14:36

hey christian,

i just noticed that the web.config also has to be modified. In the section system.web should be an entry like
&lt;httpHandlers&gt;
&lt;add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/&gt;
&lt;/httpHandlers&gt;

cheers, bernd

#9 - Kenneth on August 29, 2006 08:05

Nice work Christian!

#10 - Biagio on August 31st, 2006 08:59

How insert code into umbraco?

#11 - Cornelia on September 14, 2006 03:54

I like it!

#12 - Marc on October 11st, 2006 12:39

Just a test... :-)

#13 - bob on October 11st, 2006 20:48

just testing your comments.

#14 - Mateusz Kierepka on October 13rd, 2006 23:07

Maybe you should also check www.comfortasp.de - nice .NET control which changes all standard controls to AJAX compatibile.

#15 - Test on November 14, 2006 18:23

Testing

#16 - Test on November 15, 2006 18:02

Test

#17 - Christian on November 30, 2006 10:34

Dette er en test

Test

#18 - Olle on December 12nd, 2006 23:09

Hello, this is a test!

#19 - Deepak on December 19, 2006 11:11

This is nice... Test

#20 - Hello, this is a test! on January 08, 2007 23:03

Hello, this is a test!

#21 - Raman on January 16, 2007 11:06

Really!! this is miraculous!!!!

#22 - Roger on January 19, 2007 12:23

Really nice! Maybe you should also have a look at www.jquery.com for a (IMHO) much better JavaScipt library...

#23 - cacooma on January 27, 2007 21:17

very nice job

#24 - fatih on March 14, 2007 11:38

very good work.

#25 - Mads Kristensen on April 14, 2007 11:06

En lille test

#26 - bleh on April 16, 2007 00:12

lknnol

#27 - Test on April 19, 2007 14:26

Test

#28 - test on April 30, 2007 21:36

test

#29 - vxcv on May 16, 2007 09:31

xcv

#30 - Nice on June 19, 2007 14:47

Nicely done.

#31 - vext on July 24, 2007 07:03

nicely don cool

#32 - www123456 on July 24, 2007 07:28

cool code you are great

#33 - test on August 06, 2007 15:11

test

#34 - Tim Mather on August 08, 2007 13:44

Sorry just testing your comments postback.

#35 - Tester on August 08, 2007 16:51

hello

#36 - test on August 16, 2007 14:42

test

#37 - test on September 04, 2007 08:58

test

#38 - test on September 28, 2007 05:04

very nice job

#39 - test on October 13rd, 2007 06:02

et

#40 - Reem on October 25, 2007 17:29

WOW, that's exciting!

#41 - aaaaaaa on October 29, 2007 10:59

aaaaa

#42 - asdf on October 29, 2007 11:02

asdf

#43 - www on October 29, 2007 12:06

www

#44 - Joan Harrison on November 24, 2007 12:20

Good work

#45 - Tester on December 04, 2007 15:35

Test

#46 - new tester on December 26, 2007 21:40

blah blah blah

#47 - greate job on January 24, 2008 10:53

great job

#48 - greate on January 24, 2008 10:53

greate

#49 - dfdfd on January 24, 2008 10:54

dfdfd

#50 - اختبار on January 25, 2008 02:27

عمل ممتاز

#51 - Chris Houston on February 04, 2008 10:00

Hi there, on your comment form you have a typo.. it should be " not shown"

Best regards,

Chris

#52 - df on March 06, 2008 14:27

dfsdfqsf

#53 - test on March 13rd, 2008 16:31

testing comment

#54 - test on March 26, 2008 12:53

test

#55 - Christian on April 22nd, 2008 20:44

Test

#56 - Saulens on April 27, 2008 16:43

Just to inform - your ImageGen seems not working, all generated labels on this site are empty.

#57 - Adam Barry on June 18, 2008 05:32

test

#58 - Darren on June 18, 2008 15:37

Test

#59 - x on September 30, 2008 22:01

xzc

#60 - Mikael on October 06, 2008 09:27

Fedt at se at du deler ud af din viden!!!

#61 - Mikael on October 06, 2008 09:35

You should consider using:
s = String.Format("{0} {1} {2}", param1, param2, param3);
Instead of :
s = param1.ToString() + " " + param2.ToString() +" " + param3.ToString();

makes the code more readable.

#62 - test on October 30, 2008 16:03

rtestst

#63 - csdfas on October 30, 2008 16:09

sdfdsf

#64 - asdasd on November 16, 2008 21:42

<Button>Can you click me? :)</Button>, i think you would want to remove all html tags in comments ;)

#65 - Ian on January 19, 2009 11:32

wow okay sound

#66 - rafa on January 27, 2009 16:52

it's nice... im also testing :)

#67 - faffy fuck on March 24, 2009 13:28

it smells! stuff it up your pooper!

#68 - dsf on May 04, 2009 10:57

dsfsdf

#69 - test on June 30, 2009 15:45

en test

#70 - Web Design Cornwall on July 16, 2009 22:05

Me too, me too!

#71 - fgbgfb on August 26, 2009 22:17

gbgb

#72 - prescription on September 06, 2009 22:00

At edrugsearch.com you can compare prices and buy prescription drugs online from verified online pharmacies.

#73 - Jakob on September 10, 2009 22:14

Really neat. Very useful too.

#74 - lala on September 30, 2009 03:39

dfdf

#75 - tet on September 30, 2009 11:05

test

#76 - Umbraco CMS Udvikler on September 30, 2009 11:08

Nice ajax module

#77 - web development on October 27, 2009 16:24

Quite inspiring,

This is a great article to help with ajax and umbraco,

Keep up the good work,

Thanks

#78 - buy pills on December 06, 2009 23:19

good=)

#79 - Pill checker on December 25, 2009 20:58

Nice blog Christian

#80 - Buy viagra Sydney on January 08, 2010 14:55

Buy viagra Sydney

#81 - кожаная мебель on January 16, 2010 08:59

This is a great article to help with ajax and umbraco

#82 - Car Rental in Ukraine on February 11st, 2010 17:19

Nice blog

#83 - med-assistant on March 21st, 2010 20:15

There is why "where to buy?"
also

#84 - order pills online on March 29, 2010 00:08

sweet not sure tho

#85 - alprazolam on March 31st, 2010 23:37

omg loved this stuff

#86 - cheap meridia on April 05, 2010 23:58

good one

#87 - order avelox online on April 06, 2010 00:07

mmm burgers

#88 - Mahen on April 09, 2010 15:42

http://mahen3d.com provide innovative solutions for all your business needs, ecommerce web site design, flash website design, website templates, accessible web site design sydney. Mahen3D.com, has been selected to receive The American Association Of Webmasters, "Gold" Award.

#89 - buy drugs no script on April 09, 2010 21:22

ie: Have I missed any?

#90 - buy Carisoprodol on April 18, 2010 04:42

thanx joe

#91 - Film Streaming on April 19, 2010 16:29

Merci amigo streaming film

#92 - buy amoxicillin online on April 20, 2010 04:52

such posts are great

#93 - Long Term Compound Interest Rates on April 20, 2010 06:12

Substantially, the article is in reality the sweetest on this precious topic. I harmonise with your conclusions and will thirstily look forward to your upcoming updates.

#94 - Gasoline additives octane on April 20, 2010 06:12

Your blog provided us valuable information to work on. You have done a marvellous job!

#95 - buy tramadol uk on April 20, 2010 23:35

well, here is my comment�are u happy?

#96 - tramadol no prescription on April 21st, 2010 00:43

good blog as usual

#97 - buy tramadol without prescription on April 21st, 2010 03:15

hence all these comments!

#98 - buy tramadol 5mg pills on April 21st, 2010 13:08

love to comment

#99 - where to buy tramadol on April 21st, 2010 15:02

A thick, soupy type of fog that is rare in Florida c

#100 - where to buy soma on April 27, 2010 22:00

re comments really that big a deal?

#101 - where to get soma on April 29, 2010 07:30

Comments do help sites flourish, especially w

#102 - order prozac canada on May 03rd, 2010 07:31

A thick, soupy type of fog that is rare in Florida c

#103 - buy Accutane canada on May 04, 2010 23:00

hmm what them is that? custom?

#104 - buy codeine no prescription on May 05, 2010 00:25

bang ouch, thats cool

#105 - buy augmentin online on May 08, 2010 06:02

I�m a serial-commenter. It�s probably because I have an opinion on everything an

#106 - where to order prozac on May 08, 2010 17:09

this helped me as hell

#107 - tramadol express delivery on May 09, 2010 06:56

thx for dat post, was preety decent

#108 - floxin on May 10, 2010 01:31

love to comment

#109 - buy clomid online on May 11st, 2010 00:16

this helped me so far

#110 - somatropin on May 16, 2010 21:56

thanx mike

#111 - wholesale laptop adapter on May 21st, 2010 11:13

ss library in Visual Studio 2003, and created a class called AjaxService.
In this class I will place all my static methods that I will call

#112 - floxin pills pharmacy on May 22nd, 2010 02:36

good one site luv that stuff

#113 - tattoo removal cream on May 22nd, 2010 02:50

Extremely helpful. I like the way you write. Do you have an RSS feed?

#114 - RAR Downloads on May 24, 2010 12:42

thankx man

#115 - twisted09 on May 26, 2010 09:39

I revelled reading it. I require to read more on this topic...I am admiring the time and effort you put in your blog, because it is obviously one great place where I can find lot of functional info..

#116 - Watch FiFa World Cup 2010 Online on May 26, 2010 11:13

This is a nice blog. Good clean UI and nice informative blog. I will be coming back soon, Thanks for posting some great ideas and I'll try to return back with a completely different browser to check things out! Also, I put a link to your blog at my site, hope you don't mind?

#117 - cytotec on May 31st, 2010 14:22

buy cytotec

#118 - Pattaya sex on June 03rd, 2010 21:23

This is a really good read for me, Must admit that you are one of the best bloggers I ever saw.Thanks for posting this informative article.

#119 - Cheapest Propecia on June 04, 2010 22:20

This is the first time i've heard of an Seo camp. Really interesting and i will be attending.

#120 - Corporate Gifts on June 04, 2010 22:30

Thank you for this blog. Thats all I can say. You most definitely have made this blog into something thats eye opening and important. You clearly know so much about the subject, youve covered so many bases. Great stuff from this part of the internet. Again, thank you for this blog.

#121 - Corporate Gifts on June 04, 2010 22:32

Your blog is a great one. What really impresses me is that you are correctly mentioned that there are thousands of tools that are available to create a website or launch one but what matters is that you choose the right one, the one that gives you all that is actually needed.

#122 - acne treatments on June 04, 2010 22:34

Thanks for taking the time to discuss this, I feel strongly about information and love learning more on this. If possible, as you gain expertise, It is extremely helpful for me.

#123 - Virtual Assistant on June 08, 2010 08:40

Thanks for taking the time to discuss this, I feel strongly about

information and love learning more on this. If possible, as you

gain expertise, It is extremely helpful for me.
would you mind updating your blog with more information?

#124 - fishing hats on June 14, 2010 11:23

This is very nice one and gives useful information. Thanks for this nice blog.

This is such a great resource that you are providing and you give it away for free. I love seeing blog that understand the value of providing a quality resource for free. It is the old what goes around comes around routine. Did you want to acquired lots of links and I see lots of trackbacks??

#125 - buy prozac on June 15, 2010 02:14

Looking forward to it

#126 - penis enlargement on June 17, 2010 12:41

I love seeing blog that understand the value of providing a quality resource for free. It is the old what goes around comes around routine. Did you want to acquired lots of links and I see lots of trackbacks??

#127 - Denial Of Claim on June 20, 2010 16:18

just noticed that the web.config also has to be modified. In the section system.web should be an entry like

#128 - this website on June 22nd, 2010 23:50

Add New Comment

#129 - where to get wellbutrin sr on June 29, 2010 22:42

Add New Comment here

#130 - cheap wellbutrin sr on June 29, 2010 23:29

swwet commenting here

#131 - coach handbags on July 03rd, 2010 05:22


I am very enjoyed for this site. Its an informative topic. It help me very much to solve some problems. Its opportunity are so fantastic and working style so speedy. I think it may be help all of you. Thanks a lot for enjoying this beauty article with me. I am appreciating it very much! Looking forward to another great article. Good luck to the author! all the best!

#132 - injury lawyer on July 05, 2010 09:02

I am happy to find this post very useful for me, as it contains lot of information. I always prefer to read the quality content and this thing I found in you post. Thanks for sharing

#133 - mbt shoes on July 06, 2010 09:23

This kind shoes are very comfortable wearing. What's more, it have the function to protect knee. At the same time, it is also good for our body shape correction.

#134 - Cap Cana on July 07, 2010 12:49

Good clean UI and nice informative blog. I will be coming back soon, Thanks for posting some great ideas and I'll try to return back with a completely different browser to check things out! Also, I put a link to your blog at my site, hope you don't mind?

#135 - Luxury Villas on July 07, 2010 12:51

I will be coming back soon, Thanks for posting some great ideas and I'll try to return back with a completely different browser to check things out! Also, I put a link to your blog at my site, hope you don't mind?

#136 - p90x on July 08, 2010 10:53

with a completely different browser to check things out! Also, I put a link to your blog at my site, hope you don't mind?

#137 - los angeles on July 09, 2010 17:34

I am really happy to deal with all the particularities described on your site as I am having lots of other problems to be discussable.

#138 - investing in Warwickshire on July 19, 2010 11:16

Thanks you for your kind support here. Your creation of a class called AjaxService was very impressive. I like reading the post like yours.

#139 - Holiday Costumes on July 19, 2010 18:31

Thanks for taking the time to discuss this, I feel strongly about information and love learning more on this. If possible, as you gain expertise, It is extremely helpful for me.

#140 - Ferrari replica watches on July 20, 2010 10:28

nice article. keep post like this...

#141 - Online dating sites on July 20, 2010 17:20

Good post. I am also going to write a blog post about this...

#142 - buy cialis uk on July 21st, 2010 00:50

no comment.

#143 - logo design on July 21st, 2010 15:34

keep em coming the good content :)

#144 - Cialis uk on July 22nd, 2010 01:34

Add New Comment thanx for the option

#145 - order discount pills canada on July 23rd, 2010 22:42

kaaj i luuv it

#146 - ipad converter on July 24, 2010 07:49

keep em coming the good content :)

#147 - available domain names on July 24, 2010 08:28

This kind shoes are very comfortable wearing. What's more, it have the function to protect knee. At the same time, it is also good for our body shape correction.

#148 - Make money on July 24, 2010 18:29

http://mahen3d.com provide innovative solutions for all your business needs, ecommerce web site design, flash website design, website templates, accessible web site design sydney. Mahen3D.com, has been selected to receive The American Association Of Webmasters, "Gold" Award.

#149 - free online dating on July 25, 2010 08:33

Substantially, the article is in reality the sweetest on this precious topic. I harmonise with your conclusions and will thirstily look forward to your upcoming updates.

#150 - shox shoes on July 25, 2010 11:33

give a quick overview how I use ajax to create comments

#151 - coach outlet on July 25, 2010 11:33

for all your business needs, ecommerce web site design

#152 - coach handbags on July 25, 2010 11:34

for posting some great ideas and I'll try to return

#153 - cheap coach handbags on July 25, 2010 11:35

asked how did you do that, and on .

#154 - chanel handbags on July 25, 2010 11:35

WebControl.SyntaxHighlighter, soon to be featured on

#155 - cheap chanel handbags on July 25, 2010 11:36

a class library in Visual Studio 2003

#156 - garden treasures gazebo on July 25, 2010 13:51

Good clean UI and nice informative blog. I will be coming back soon, Thanks for posting some great ideas and I'll try to return back with a completely different browser to check things out! Also, I put a link to your blog at my site, hope you don't mind?

#157 - Wyler replica watches on July 26, 2010 11:22

nice article. keep post like this...

#158 - sales letter software on July 26, 2010 23:13

i just noticed that the web.config also has to be modified. In the section system I noticed this.

#159 - Car Accident Solicitor on July 27, 2010 05:26

This is good. although, I'm not into blog posting but I want to know it for my self knowledge. Thanks for your quick and direct information. I will try this sometime.

#160 - Salon Equipment on July 27, 2010 13:23

Substantially, the article is in reality the sweetest on this precious topic. I harmonise with your conclusions and will thirstily look forward to your upcoming updates.

#161 - In Home Care on July 28, 2010 11:21

Maybe you should also check www.comfortasp.de - nice .NET control which changes all standard controls to AJAX compatibile.

#162 - London Escorts on July 28, 2010 19:01

nice article. keep post like this...

#163 - outdoor dining furniture on July 28, 2010 20:13

Substantially, the article is in reality the sweetest on this precious topic. I harmonise with your conclusions and will thirstily look forward to your upcoming updates.

#164 - Speedos on July 29, 2010 08:26

This is good. although, I'm not into blog posting but I want to know it for my self knowledge. Thanks for your quick and direct information. I will try this sometime.

#165 - stressballs on July 29, 2010 16:10

Excellent post.
<a href="http://www.fortepromo.com/Imprinted_Promotional_Coffee_Mugs_s/115.htm" title="personalized coffee mugs">personalized coffee mugs</a>
<a href="http://www.fortepromo.com/Promotional_Stress_Balls_s/182.htm" title="Stress Balls">Stress Balls</a>
<a href="http://www.fortepromo.com/Promotional_Tape_Measures_s/285.htm" title="promotional tape measures">promotional tape measures</a>
<a href="http://www.fortepromo.com/" title="promotional products">promotional products</a>

 

Create a new comment

Recent Post

Tags