<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Guy Burstein&amp;#39;s Blog : WebMatrix</title><link>http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/WebMatrix/default.aspx</link><description>Tags: WebMatrix</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>הכירו את WebMatrix: חבילת טכנולוגיות וכלי לבניית אתרים בחינם מבית מיקרוסופט</title><link>http://blogs.microsoft.co.il/blogs/bursteg/archive/2010/07/09/webmatrix.aspx</link><pubDate>Fri, 09 Jul 2010 18:46:24 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:677570</guid><dc:creator>Guy Burstein</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl" align="right"&gt;   &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 10px 10px 0px;display:inline;border-top:0px;border-right:0px;" title="בניית אתרים" border="0" hspace="12" alt="בניית אתרים" align="left" src="http://blogs.microsoft.co.il/blogs/bursteg/clip_image002_3BDACF96.jpg" width="209" height="109" /&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.microsoft.com/web/webmatrix"&gt;WebMatrix&lt;/a&gt;&lt;b&gt; &lt;/b&gt;היא חבילה חינמית המכילה את כל מה שבוני אתרים צריכים כדי לבנות אתר לאינטרנט ובחינם: היא כוללת שרת Web, שפת סקריפט בשם &lt;strong&gt;CSHTML&lt;/strong&gt; (שילוב של #C ושל HTML), מסד נתונים, וכלי אחד לבניית האתר וניהול הנתונים שלו. עם &lt;strong&gt;WebMatrix&lt;/strong&gt; ו- CSHTML אפשר לבנות בקלות אתר דינמי גם ללא רקע בתכנות, לנהל את מסד הנתונים של האתר, לבצע אופטימיזציה למנועי חיפוש ולהעלות אותו לחברת האחסון בלחיצת כפתור כדי לחשוף אותו לאינטרנט.&lt;/p&gt;    &lt;p&gt;החבילה, שמשקלה הוא פחות מ- 50Mb וניתן להורדה כחבילה אחת, כוללת 4 רכיבים:&lt;/p&gt;    &lt;p&gt;&lt;b&gt;IIS Developer Express&lt;/b&gt; –שרת Web לצרכי פיתוח, שהוא קטן, קל נוח להתקנה ולא דורש הרשאות אדמיניסטרטור על המחשב כדי להשתמש בו. ניתן להתקין אותו על Windows החל מגרסת XP והוא מאפשר לבנות אתרים בטכנולוגיות החדשות ביותר כמו ASP.Net, CSHTML ו- PHP.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;CSHTML&lt;/b&gt; – היא שפה לבניית אתרים דינמיים המשלבת בין הפשטות של HTML לבין העושר שבשפת התכנות C#. דף CSHTML לדוגמא, בו אנו ניגשים לבסיס הנתונים, שולפים ממנו ומציגים רשימת פריטים יראה כך:&lt;/p&gt;    &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;" dir="ltr" align="left"&gt;     &lt;p style="margin:0px;"&gt;&amp;lt;html&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160; &amp;lt;head&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;CSHTML Sample&amp;lt;/title&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160; &amp;lt;/head&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160; &amp;lt;body&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ul&amp;gt;?&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; @foreach (var row in db.Query(&amp;quot;SELECT * FROM Products&amp;quot;)) {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;li&amp;gt;@row.Name&amp;lt;/li&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ul&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160; &amp;lt;/body&amp;gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;   &lt;/div&gt;    &lt;div dir="rtl" align="right"&gt;     &lt;p&gt;קל מאד ללמוד לבנות אתרים סטנדרטים בשפת CSHTML בעצמאות WebMatrix גם ללא רקע בתכנות, ומשימות נפוצות רבות הופכות להיות פשוטות:&lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;הצגה ועדכון מידע &lt;/li&gt;        &lt;li&gt;שליחת הודעות דואר אלקטרוני &lt;/li&gt;        &lt;li&gt;הצגת קבצי וידאו (Flash, WMV, Silverlight) &lt;/li&gt;        &lt;li&gt;העלאת קבצים ותמונות &lt;/li&gt;        &lt;li&gt;קישור לרשתות חברתיות &lt;/li&gt;     &lt;/ul&gt;      &lt;p&gt;&lt;b&gt;SQL Server Compact&lt;/b&gt; – הוא מסד נתונים קל להתקנה ושימוש השומר את הנתונים בקובץ. יתרונו הגדול הוא בפשוטת העלאתו לחברת האחסון בסוף תהליך הפיתוח, ללא צורך בתשלום כלשהו עליו לחברת האחסון.&lt;/p&gt;      &lt;p&gt;&lt;b&gt;WebMatrix&lt;/b&gt; – כלי חינמי לבניית אתרים שמאפשר לנהל ולבצע את כל תהליך בניית האתר – החל מרגע יצירת האתר החדש, דרך כל שלבי הפיתוח, הבדיקות, ההתאמה למנועי חיפוש ולבסוף – העלאתו לחברת האחסון כדי שיהיה זמין למשתמשים דרך האינטרנט.&lt;/p&gt;      &lt;p&gt;&lt;img style="border-right-width:0px;margin:0px auto 10px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="בניית אתרים" border="0" alt="בניית אתרים" src="http://blogs.microsoft.co.il/blogs/bursteg/clip_image004_6883896F.jpg" width="476" height="357" /&gt;&lt;/p&gt;      &lt;p&gt;&lt;b&gt;איך בונים אתרים עם &lt;/b&gt;&lt;b&gt;WebMatrix&lt;/b&gt;&lt;b&gt;?&lt;/b&gt;&lt;/p&gt;      &lt;p&gt;ניתן &lt;a href="http://www.microsoft.com/web/webmatrix"&gt;ללמוד עוד על WebMatrix&lt;/a&gt; בדף הרשמי באתר מיקרוסופט (באנגלית), או להשתמש ב&lt;a&gt;מדריך WebMatrix ו- CSHTML&lt;/a&gt; באתר Webmaster.org.il.&lt;/p&gt;      &lt;p&gt;פיתוח אתרים עם WebMatrix יוצג לראשונה במסגרת &lt;a&gt;כנס בוני האתרים WebTech 2010&lt;/a&gt; של מכללת הי טק שיתקיים בבית חיל האוויר ב- 11.8.2010.&lt;/p&gt;      &lt;p&gt;תהנו!        &lt;br /&gt;&lt;/p&gt;   &lt;/div&gt;     &lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/bursteg/archive/2010/07/09/webmatrix.aspx" scrolling="no" frameborder="0" style="border:none;width:595px;height:27px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=677570" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/.Net/default.aspx">.Net</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/WebsiteSpark/default.aspx">WebsiteSpark</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/WebMatrix/default.aspx">WebMatrix</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/CSHTML/default.aspx">CSHTML</category></item><item><title>How to create a CSHTML and WebMatrix TweetMeme Helper</title><link>http://blogs.microsoft.co.il/blogs/bursteg/archive/2010/07/07/how-to-create-a-cshtml-and-webmatrix-tweetmeme-helper.aspx</link><pubDate>Wed, 07 Jul 2010 13:34:09 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:677092</guid><dc:creator>Guy Burstein</dc:creator><slash:comments>3</slash:comments><description>&lt;h1&gt;How to create a CSHTML and WebMatrix TweetMeme Helper&lt;/h1&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;margin:0px 0px 20px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" class="wlDisabledImage" title="How to create a CSHTML and WebMatrix TweetMeme Helper" border="0" alt="How to create a CSHTML and WebMatrix TweetMeme Helper" align="right" src="http://blogs.microsoft.co.il/blogs/bursteg/WebMatrix_4ABBD326.png" width="182" height="95" /&gt;Microsoft has recently &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/06/introducing-webmatrix.aspx" target="_blank"&gt;introduced&lt;/a&gt; the first beta of its new stack for building great web sites – &lt;strong&gt;WebMatrix&lt;/strong&gt;. One of the key components of &lt;strong&gt;WebMatrix&lt;/strong&gt; is the &lt;strong&gt;ASP.Net Web Pages “Razor” Syntax&lt;/strong&gt; (or simply: &lt;strong&gt;CSHTML&lt;/strong&gt;) that lets you write C# code inside the HTML markup.&lt;/p&gt;  &lt;h3&gt;Helpers in WebMatrix&lt;/h3&gt;  &lt;p&gt;Among the new possibilities and simplicity that this approach brings to people who build web sites, there is also the notion of &lt;strong&gt;Helper&lt;/strong&gt;. &lt;strong&gt;Helpers&lt;/strong&gt; are a way to use a single line of code for a common task that originally had taken several lines of code to do. Such helpers can be:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sending mails &lt;/li&gt;    &lt;li&gt;Displaying a WebGrid for presenting tabular data &lt;/li&gt;    &lt;li&gt;Adding the Facebook button &lt;/li&gt;    &lt;li&gt;Querying the database &lt;/li&gt;    &lt;li&gt;Displaying a Twitter profile &lt;/li&gt;    &lt;li&gt;Embedding rich media (Silverlight, Flash, WMV) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;margin:0px 0px 20px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" class="wlDisabledImage" title="How to create a CSHTML and WebMatrix TweetMeme Helper" border="0" alt="How to create a CSHTML and WebMatrix TweetMeme Helper" align="right" src="http://blogs.microsoft.co.il/blogs/bursteg/image_76F85A0A.png" width="49" height="60" /&gt;In this post I will show &lt;strong&gt;how to create a custom helper to use in your ASP.Net Web Pages with Razor Syntax inside WebMatrix&lt;/strong&gt;. For the demo I will build a TweetMeme helper that embeds the familiar TweetMeme button. &lt;/p&gt;  &lt;p&gt;There are 2 ways of creating helpers to use in WebMatrix:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create the helper as a Class Library. &lt;/li&gt;    &lt;li&gt;Create it as a class and distribute the code. &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Create CSHTML Helper for WebMatrix as a Class Library in Visual Studio 2010&lt;/h3&gt;  &lt;p&gt;1. Open Visual Studio 2010, and create a new Class Library that targets .Net Framework 4 called TweetMeme.Helpers.&lt;/p&gt;  &lt;p&gt;2. Add a reference to &lt;strong&gt;System.Web.dll&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;3. Rename the default file (Class1.cs) to a more meaningful name, such as TweetMeme.cs.&lt;/p&gt;  &lt;p&gt;4. Rename the class name in that file to TweetMeme, and remove the namespace declaration. You better off without a namespace when using helpers.&lt;/p&gt;  &lt;p&gt;In order to implement a custom helper, you should create a method that will render to required HTML for the helper. This method should be &lt;em&gt;public &lt;/em&gt;and &lt;em&gt;static &lt;/em&gt;method and should return &lt;em&gt;IHtmlString&lt;/em&gt; as the following code:&lt;/p&gt;  &lt;pre style="font-family:consolas;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;IHtmlString&lt;/span&gt; Button(... parameters ... )&lt;br /&gt;&lt;pre style="font-family:consolas;"&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Generate the HTML&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; html = ...&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;HtmlString&lt;/span&gt;(html);&lt;br /&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;5. Implement the TweetMeme button method:&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;IHtmlString&lt;/span&gt; Button(&lt;span style="color:blue;"&gt;string&lt;/span&gt; Url, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;#160; Twitter = &lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;bool&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; Compact = &lt;span style="color:blue;"&gt;false&lt;/span&gt;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;#160; UrlShortenerService = &lt;span style="color:#a31515;"&gt;&amp;quot;bit.ly&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;#160; UrlShortenerAPIKey = &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Generate the HTML&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; html = GeneratedCode(Url, Twitter, Compact, UrlShortenerService, UrlShortenerAPIKey);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;HtmlString&lt;/span&gt;(html);&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;6. Implement the GenerateCode method, that generates the HTML for TweetMeme:&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt; GeneratedCode(&lt;span style="color:blue;"&gt;string&lt;/span&gt; url, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; twitterName = &lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; isCompact = &lt;span style="color:blue;"&gt;false&lt;/span&gt;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; UrlShortenerService = &lt;span style="color:#a31515;"&gt;&amp;quot;bit.ly&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; UrlShortenerAPIKey = &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(url))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;throw&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Url cannot be null or empty&amp;quot;&lt;/span&gt;, url);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt; builder = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;script type=\&amp;quot;text/javascript\&amp;quot;&amp;gt; &amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (isCompact)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_style = &amp;#39;compact&amp;#39;; &amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_url = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, url));&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(twitterName))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_source = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, twitterName));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(UrlShortenerService))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_service = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, UrlShortenerService));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(UrlShortenerAPIKey))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_service_api = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, UrlShortenerAPIKey));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/script&amp;gt; &amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; builder.Append(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;script type=\&amp;quot;text/javascript\&amp;quot; src=\&amp;quot;http://tweetmeme.com/i/scripts/button.js\&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; builder.ToString();&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;7. That’s it. The helper is ready to use.&lt;/p&gt;

&lt;h3&gt;Using a Custom Helper in WebMatrix&lt;/h3&gt;

&lt;p&gt;To use a custom helper in WebMatrix that is delivered as an assembly, you simply have to copy that .dll into a &lt;em&gt;bin&lt;/em&gt; folder in your site.&lt;/p&gt;

&lt;p&gt;1. In WebMatrix, add a bin folder to the root of your site.&lt;/p&gt;

&lt;p&gt;2. Copy the output assembly of the helper (from the bin\debug\ folder of the class library you have just created) to the bin folder of the site.&lt;/p&gt;

&lt;p&gt;3. In your code, simply call the Helper:&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;@TweetMeme.Button(url: Request.Url.AbsoluteUri, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; twitter: &amp;quot;bursteg&amp;quot;, // replace with your twitter name &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; compact: false)&lt;/pre&gt;
&lt;img style="border-right-width:0px;margin:0px 20px 0px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" class="wlDisabledImage" title="image" border="0" alt="image" align="left" src="http://blogs.microsoft.co.il/blogs/bursteg/image_3D09171E.png" width="44" height="52" /&gt;&lt;strong&gt;Notice&lt;/strong&gt;: If you now run your site locally, you with receive a TweetMeme button with a question mark in it. This is just because the url that it points to is a localhost address and not something that can be reached from the outside. 

&lt;h3&gt;Create CSHTML Helper as a Class file inside WebMatrix&lt;/h3&gt;

&lt;p&gt;The second approach for creating helpers for WebMatrix is just adding a C# file with the helper class.&lt;/p&gt;

&lt;p&gt;1. Inside WebMatrix, add a folder called &lt;em&gt;App_Code&lt;/em&gt; to your web site.&lt;/p&gt;

&lt;p&gt;2. Into the App_Code folder, add a new C# class to your web site.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width:0px;margin:0px 0px 0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" class="wlDisabledImage" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/bursteg/image_273F2EC1.png" width="449" height="316" /&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;2. Create the helper in this file using the same code as above&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt; &lt;br /&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;static class&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;TweetMeme&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;IHtmlString&lt;/span&gt; Button(&lt;span style="color:blue;"&gt;string&lt;/span&gt; url,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; twitter = &lt;span style="color:blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; compact = &lt;span style="color:blue;"&gt;false&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; urlShortenerService = &lt;span style="color:#a31515;"&gt;&amp;quot;bit.ly&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; urlShortenerAPIKey = &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Generate the HTML&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; html = GeneratedCode(url, twitter, compact, urlShortenerService, urlShortenerAPIKey);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;HtmlString&lt;/span&gt;(html);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt; GeneratedCode(&lt;span style="color:blue;"&gt;string&lt;/span&gt; url,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; twitterName = &lt;span style="color:blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; isCompact = &lt;span style="color:blue;"&gt;false&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; urlShortenerService = &lt;span style="color:#a31515;"&gt;&amp;quot;bit.ly&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; urlShortenerAPIKey = &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(url))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;throw&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Url cannot be null or empty&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt; builder = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;script type=\&amp;quot;text/javascript\&amp;quot;&amp;gt; &amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (isCompact)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_style = &amp;#39;compact&amp;#39;; &amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_url = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, url));&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(twitterName))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_source = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, twitterName));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(urlShortenerService))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_service = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, urlShortenerService));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(UrlShortenerAPIKey))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;tweetmeme_service_api = &amp;#39;{0}&amp;#39;; &amp;quot;&lt;/span&gt;, urlShortenerAPIKey));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/script&amp;gt; &amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;script type=\&amp;quot;text/javascript\&amp;quot; src=\&amp;quot;http://tweetmeme.com/i/scripts/button.js\&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; builder.ToString();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;3. Use the helper in your code as shown above.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;There are 2 approaches for creating &lt;strong&gt;Helpers for CSHTML&lt;/strong&gt;. Creating helpers in class libraries are probably the better way of doing this in the eyes of professional developers, but my guess is that people who build web sites will prefer copying and pasting code samples for helpers to use in the project, and we will have a great community of helpers around the web.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/bursteg/archive/2010/07/07/how-to-create-a-cshtml-and-webmatrix-tweetmeme-helper.aspx" scrolling="no" frameborder="0" style="border:none;width:595px;height:27px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=677092" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/.Net/default.aspx">.Net</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/.Net+Framework+4.0/default.aspx">.Net Framework 4.0</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/WebMatrix/default.aspx">WebMatrix</category></item></channel></rss>