<?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>שלמה גולדברג (הרב דוטנט)</title><link>http://blogs.microsoft.co.il/blogs/shlomo/</link><description>מרצה בסלע ויועץ בעולם ה - net.</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>jQuery progress bar label</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/05/02/jquery-progress-bar-label.aspx</link><pubDate>Thu, 02 May 2013 06:00:02 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1985924</guid><dc:creator>Shlomo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1985924</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/05/02/jquery-progress-bar-label.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;בקשו ממנו להשתמש ב – jquery progress bar ולהציג את האחוזים מתחת ל – progress bar צמוד לערך שלו, כלומר משהו כזה:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_77C6B001.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_3C52FEA9.png" width="606" height="132" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הדרך לעשות זאת היא פשוטה, בהינתן שיש לנו את ה – html הבא:&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;         &lt;p&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;progressbar&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value&amp;quot;&amp;gt;&lt;/span&gt;20&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;progressbar&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;50&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value&amp;quot;&amp;gt;&lt;/span&gt;50&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;progressbar&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value&amp;quot;&amp;gt;&lt;/span&gt;10&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;             &lt;br /&gt;            &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Make&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onclick&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;make()&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Add 10&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onclick&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;add10()&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;כל אלמנט wrapper מכיל div שיהפוך להיות progress bar, ומכיל ב – data-value את הערך.&lt;/p&gt;    &lt;p&gt;ובנוסף עוד div שמכיל בטקסט את האחוזים. &lt;/p&gt;    &lt;p&gt;כעת נכתובת את הסקריפט שמייצר את ה&amp;#160; - progress bar&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; make() {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#800000;"&gt;&amp;#39;.progressbar&amp;#39;&lt;/span&gt;).each(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (idx, elm) {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; $this = $(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; $value = $this.parent().find(&lt;span style="color:#800000;"&gt;&amp;#39;.value&amp;#39;&lt;/span&gt;);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $this.progressbar({           &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; value: $this.data(&lt;span style="color:#800000;"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;),           &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; change: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (e) {           &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; $value.css(&lt;span style="color:#800000;"&gt;&amp;#39;margin-left&amp;#39;&lt;/span&gt;, $this.find(&lt;span style="color:#800000;"&gt;&amp;#39;.ui-progressbar-value&amp;#39;&lt;/span&gt;).width());           &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; $value.text($this.progressbar(&lt;span style="color:#800000;"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;));           &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;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; $value.css(&lt;span style="color:#800000;"&gt;&amp;#39;margin-left&amp;#39;&lt;/span&gt;, $this.find(&lt;span style="color:#800000;"&gt;&amp;#39;.ui-progressbar-value&amp;#39;&lt;/span&gt;).width());           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; });           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;נמצא בעזרת jquery selector את כל ה – progress, עבור כל אחד מהם נשמור בצד את ה – האלמנט וה – div שמכיל את הטקסט כ – jquery objects.&lt;/p&gt;    &lt;p&gt;כעת נהפוך כל אחד מהלאמנטים ל – progress bar, כשהערך של value יגיע ממה שנכתב על ה – div, ונרשם לארוע change שבו נשנה את הערך שכתוב על ה – label ונוודא שהמיקום שלו יהיה בהתאם לערך.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;רק כדי שנראה שזה עובד נוסיף את הלחצן שיוסיף לכולם עוד 10 בכל לחיצה.&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; add10() {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#800000;"&gt;&amp;#39;.progressbar&amp;#39;&lt;/span&gt;).each(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (idx, elm) {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; $this = $(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; current = parseInt($this.progressbar(&lt;span style="color:#800000;"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;));           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $this.progressbar(&lt;span style="color:#800000;"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;, current + 10);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; });           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1985924" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/jQuery/default.aspx">jQuery</category></item><item><title>Control iis from code</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/04/26/control-iis-from-code.aspx</link><pubDate>Fri, 26 Apr 2013 10:24:03 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1960208</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1960208</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/04/26/control-iis-from-code.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2010/12/15/rcycling-application-pool-programmatically.aspx"&gt;בעבר כתבתי&lt;/a&gt; כיצד לעשות restart ל – application pool מקוד בעזרת DirectoryEnrty, לאחרונה הייתי צריך לייצר application עבור site קיים מקוד.&lt;/p&gt;    &lt;p&gt;מסתבר שיש api טוב יותר מ – DirectoryEntry בשם Microsoft.Web.Administration&lt;/p&gt;    &lt;p&gt;ה – dll יושב תחת: C:\Windows\SysWOW64\inetsrv\Microsoft.Web.Administration.dll או תחת system32 (תלוי במערכת ההפעלה)&lt;/p&gt;    &lt;p&gt;לאחר מכן ניתן לכתוב קוד כזה:&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#2b91af;"&gt;ServerManager&lt;/span&gt; iisManager = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ServerManager&lt;/span&gt;();           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; site = iisManager.Sites[&lt;span style="color:#a31515;"&gt;&amp;quot;mySite&amp;quot;&lt;/span&gt;];           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; currentPhysicalPath = site.Applications[&lt;span style="color:#a31515;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;].VirtualDirectories[&lt;span style="color:#a31515;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;].PhysicalPath;           &lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; app = site.Applications.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;/newApp&amp;quot;&lt;/span&gt;, currentPhysicalPath + &lt;span style="color:#a31515;"&gt;&amp;quot;/folder&amp;quot;&lt;/span&gt;);           &lt;br /&gt;iisManager.CommitChanges();&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/b/carlosag/archive/2006/04/17/microsoftwebadministration.aspx"&gt;למאמר&lt;/a&gt; המסביר על ה – API (יש לשים לב שהוא מדבר על API ישן יותר המשתמש בפונקצית Update אשר לא קיימת יותר, ובמקומה יש את CommitChanges)&lt;/p&gt; &amp;lt;/DIV&amp;lt;&lt;p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1960208" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/iis7/default.aspx">iis7</category></item><item><title>מתנדבים לשימוש במערכת שעות אינטרנטית</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/04/23/1944188.aspx</link><pubDate>Tue, 23 Apr 2013 16:57:40 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1944188</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1944188</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/04/23/1944188.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;אני מחפש מתנדבים לשימוש במערכת שעות אינטרנטית שהעליתי בימים אלו לאוויר. &lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.lpage.co.il/"&gt;http://www.lpage.co.il/&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;המערכת חינמית לחלוטין (בתקופה הקרובה (וכנראה גם הרחוקה) - ומי שיתנדב להשתמש בזה כרגע ימשיך חינם לפחות לחצי שנה אחרי שהגרסה הרשמית תעלה)&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;האתר עדיין לא עבר עיצוב וגרפיקה. &lt;/li&gt;      &lt;li&gt;השרת טיפה איטי. &lt;/li&gt;      &lt;li&gt;נבדק כרגע רק בכרום. &lt;/li&gt;      &lt;li&gt;היות שזה עדיין בפיתוח, בכל כמה ימים מתווספים פיצ&amp;#39;רים חדשים. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;אני בטוח שהאתר יוכל לבוא לעזר למי שצריך לדווח/לעקוב אחרי שעות עבודה.      &lt;br /&gt;אשמח שתשתמשו, ואשמח לקבל כל פידבק.&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1944188" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category></item><item><title>Send to mail, sql query result as csv file</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/04/19/send-to-mail-sql-query-result-as-csv-file.aspx</link><pubDate>Fri, 19 Apr 2013 07:26:05 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1920355</guid><dc:creator>Shlomo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1920355</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/04/19/send-to-mail-sql-query-result-as-csv-file.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" align="right"&gt;   &lt;p&gt;התקבשתי לפתח תוכנה קטה שתדע להריץ שאילתא בבסיס נתונים, לקבל את התוצאה ולשלוח אותה במייל כקובץ csv.&lt;/p&gt;    &lt;p&gt;מייד נכתוב אותה יחד. (&lt;a href="http://blogs.microsoft.co.il/files/folders/1920341/download.aspx"&gt;ניתן להוריד קבצי מקור&lt;/a&gt; – כאן לא נראה את כל הקוד, רק את החלקים החשובים).&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;למעשה הפתרון שלנו יהיה מורכב משלושה פרוייקטים.&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;SqlReportLib, יכיל את כל הקוד עצמו (הלוגיקה השליחה במייל, ההרצה ב – DB. &lt;/li&gt;      &lt;li&gt;SqlReportApp, אפליקצייה מסוג Console הגדירה את כל ההגדרות בקונפיג, ופשוט מריצה את הקוד. &lt;/li&gt;      &lt;li&gt;UI, יודעת גם להריץ את הקוד, אך נותנת UI עבור הפרמטרים. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;נתחיל:&lt;/p&gt;    &lt;p&gt;בפרוייקט SqlReportLib יהיו לנו שלושה אובייקטים מרכזיים:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Dal – אחראי על העבודה מול בסיס הנתונים. &lt;/li&gt;      &lt;li&gt;MailHelper - אחראי על שליחת המייל. &lt;/li&gt;      &lt;li&gt;Worker – הוא המקשר בין כל האובייקטים. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;במחלקת Worker ישנם שני פונקציות מרכזיות בשם Execute, הנראות כך:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Execute()           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;WorkerParameters&lt;/span&gt; parameters = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;WorkerParameters&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; DalParams = ReadDalParamsFromConfig(),           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MailParams = ReadMailParamsFromConfig()           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; };           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Execute(parameters);           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Execute(&lt;span style="color:#2b91af;"&gt;WorkerParameters&lt;/span&gt; parameters)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ReadParametersFromConfig(parameters);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; table = &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt;.GetData(parameters.DalParams);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MailHelper&lt;/span&gt;.Send(parameters.MailParams, table);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;המתודה הראשונה, לא מקבלת שום פרמטר, ויוצאת מתוך הנחה שכל המידע נמצא בקונפיג, המתודה השנייה מקבלת את האובייקט (או מאותחלת מהקונפיג בעזרת המתודה הקודמת, או עם פרמטרים כפי שנעשה מה – UI)&lt;/p&gt;    &lt;p&gt;נסתכל לרגע על קובץ הקונפיג (הנמצאת באפליקצית SqlReportApp – שזוהי אפליקציית ה – Console, שלדוגמא רוצים להריץ אותה בעזרת windows scheduler)&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;SqlReportConnection&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;connectionString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Data Source=.;Initial Catalog=hours;Integrated Security=True&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; Text, StoredProcedure &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;CommandType&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Text&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Query&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;SELECT * FROM Users&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Body&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Read the attach report, if you have any question, please mail back.&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;CC&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;cc1@server.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;From&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;user@gmail.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; Embedded, Csv &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;ReportType&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Embedded&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Subject&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;User Report&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;key&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;To&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;to1@gmail.com;to2@gmail.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.net&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;mailSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;smtp&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;deliveryMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Network&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;from&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;user@gmail.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;network&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;enableSsl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;host&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;smtp.gmail.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;port&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;587&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;userName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;user@gmail.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;password&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;PWD&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;smtp&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;mailSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.net&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;ראשית יש ה – ConnectioString שמכיל את הכתובת לבסיס הנתונים, לאחר מכן ב – AppSettings יש הגדרות עבור ה – Dal (CommandType, Query) כלומר מה השאילתא להרצה וכיצד להריץ אותה – האפליקצייה משתמשת ב Ado.net בסיסי, &lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2009/12/19/ado.aspx"&gt;להסברים נוספים.&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;לאחר מכן יש פרמטרים עבור המייל (הפרטרים הם פשוטים, למי לשלוח, ממי וכד’ – הפרמטר היחידי שדורש הסבר זה ה – ReportType, שמגדיר האם הדוח יגיע כחלק מהמייל או יצורף כקובץ)&lt;/p&gt;    &lt;p&gt;בסוף יש הגדרות smtp בדוגמא כאן נשתמש ב – gmail (כמובן שצריך להכניס שם משתמש וסיסמא של gmail) &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;נחזור למחלקות הפרמטרים שנראות כך: (הסברים בהמשך)&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;WorkerParameters&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DalParameters&lt;/span&gt; DalParams { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailParameters&lt;/span&gt; MailParams { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;NotifyObject&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;INotifyPropertyChanged&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; OnPropertyChanged(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; propName)           &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:#0000ff;"&gt;if&lt;/span&gt; (PropertyChanged != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)           &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; PropertyChanged(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PropertyChangedEventArgs&lt;/span&gt;(propName));           &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:#0000ff;"&gt;field&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;NonSerialized&lt;/span&gt;]           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PropertyChangedEventHandler&lt;/span&gt; PropertyChanged;           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DalParameters&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;NotifyObject&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; connectionString;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ConnectionString           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; connectionString; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; connectionString = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;ConnectionString&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; query;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Query           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; query; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; query = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;Query&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt; commandType;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt; CommandType           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; commandType; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; commandType = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;CommandType&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailParameters&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;NotifyObject&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; from;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; From           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; from; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; from = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;From&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; to;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; To           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; to; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; to = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;To&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; cc;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; CC           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; cc; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; cc = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;CC&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; subject;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Subject           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; subject; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; subject = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;Subject&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; body;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Body           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; body; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; body = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;Body&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ReportType&lt;/span&gt; reportType;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ReportType&lt;/span&gt; ReportType           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; reportType; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; reportType = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;ReportType&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SMTPParameters&lt;/span&gt; SMTP { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SMTPParameters&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;NotifyObject&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; host;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Host           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; host; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; host = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;Host&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; port;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Port           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; port; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; port = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;Port&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; userName;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; UserName           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; userName; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; userName = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;UserName&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; password;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Password           &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:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; password; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;           &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; password = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;           &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; OnPropertyChanged(&lt;span style="color:#a31515;"&gt;&amp;quot;Password&amp;quot;&lt;/span&gt;);           &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; }           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ReportType&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Embedded,           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Csv           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;המחלקה הראשית (WorkerParameters) מכילה את שני המחלקות של הפרמטרים Mailparameters, DalParameters.&lt;/p&gt;    &lt;p&gt;כל אחד מהם מכיל את ההגדרות שראינו בקונפיג – הסיבה שהם יורשות מ – NotifyObject וכל המאפיינים מרימים את האירוע בכל set של כל מאפיין, היא כדי לאפשר binding באפליקציית ה – ui (כפי שנראה בהמשך)&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;נחזור למתודת Execute&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Execute(&lt;span style="color:#2b91af;"&gt;WorkerParameters&lt;/span&gt; parameters)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ReadParametersFromConfig(parameters);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; table = &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt;.GetData(parameters.DalParams);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MailHelper&lt;/span&gt;.Send(parameters.MailParams, table);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;דבר ראשון המתודה מקבלת DataTable מה – Dal, הקוד הוא מאוד פשוט (הגדרת הפרמטרים הפעלת המתודה והחזרת הטבלה).&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; connection;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; command = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; DAL()           &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; connection = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; command = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; command.Connection = connection;           &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:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; GetData(&lt;span style="color:#2b91af;"&gt;DalParameters&lt;/span&gt; parameters)           &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; connection.ConnectionString = parameters.ConnectionString;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; command.CommandText = parameters.Query;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; command.CommandType = parameters.CommandType;           &lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; connection.Open();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; table = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; table.Load(command.ExecuteReader());           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; connection.Close();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; table;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;בסוף מתודת GetData לאחר שיצרנו את הטבלה השתמשנו במתודת Load שיודעת לקבל כפרמטר DataReader ולבנות טבלה אוטומטית מכל המידע שנמצא בה.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;לאחר שאנחנו מקבלים את הטבלה (במתודת Execute) אנחנו פונים ל – MailHelper ושולחים את הטבלה.&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Send(&lt;span style="color:#2b91af;"&gt;MailParameters&lt;/span&gt; parameters, &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; table)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt; message = CreateMailMessage(parameters);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AttachReport(message, table, parameters.ReportType);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SmtpClient&lt;/span&gt; client = CreateSmtpClient(parameters);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; client.Send(message);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;ראשית ניצור אובייקט מסוג MailMessage מתוך הפרמטרים, לאחר מכן נוסיף את הטבלה למייל (כקובץ או כחלק מהמיל) ולאחר מכן ניצור אובייקט מסוג SmtpClient ונשלח את המייל.&lt;/p&gt;    &lt;p&gt;מתודת CreateMailMessage&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt; CreateMailMessage(&lt;span style="color:#2b91af;"&gt;MailParameters&lt;/span&gt; parameters)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt; message = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; message.From = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailAddress&lt;/span&gt;(parameters.From);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; parameters.To.Split(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;char&lt;/span&gt;[] { &lt;span style="color:#a31515;"&gt;&amp;#39;;&amp;#39;&lt;/span&gt; }, &lt;span style="color:#2b91af;"&gt;StringSplitOptions&lt;/span&gt;.RemoveEmptyEntries))           &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; message.To.Add(item);           &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:#0000ff;"&gt;if&lt;/span&gt; (parameters.CC != &lt;span style="color:#0000ff;"&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:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; parameters.CC.Split(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;char&lt;/span&gt;[] { &lt;span style="color:#a31515;"&gt;&amp;#39;;&amp;#39;&lt;/span&gt; }, &lt;span style="color:#2b91af;"&gt;StringSplitOptions&lt;/span&gt;.RemoveEmptyEntries))           &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; message.CC.Add(item);           &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; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; message.Body = parameters.Body;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; message.Subject = parameters.Subject;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; message.IsBodyHtml = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; message;           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;כדי לאפשר לשלוח ב – to, cc) ליותר מאחד, המחרוזת (בקונפיג) יכולה להכיל את התו ; ולכן יש כאן split למאפיינים הללו.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;מתודת AttachReport נראית כך:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; AttachReport(&lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt; message, &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; table, &lt;span style="color:#2b91af;"&gt;ReportType&lt;/span&gt; reportType)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (reportType == &lt;span style="color:#2b91af;"&gt;ReportType&lt;/span&gt;.Csv)           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.Attachments.Add(GetCsvFile(table));           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.Body += GetHtmlFromData(table);           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetHtmlFromData(&lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; data)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; tab = &lt;span style="color:#a31515;"&gt;&amp;quot;\t&amp;quot;&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt; sb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(tab + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;body&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(tab + tab + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;table&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008000;"&gt;// headers.&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.Append(tab + tab + tab + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;tr&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataColumn&lt;/span&gt; dc &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; data.Columns)           &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; sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;td&amp;gt;{0}&amp;lt;/td&amp;gt;&amp;quot;&lt;/span&gt;, dc.ColumnName);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008000;"&gt;// data rows&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataRow&lt;/span&gt; dr &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; data.Rows)           &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; sb.Append(tab + tab + tab + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;tr&amp;gt;&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:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataColumn&lt;/span&gt; dc &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; data.Columns)           &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; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; cellValue = dr[dc] != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; ? dr[dc].ToString() : &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;           &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; sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;td&amp;gt;{0}&amp;lt;/td&amp;gt;&amp;quot;&lt;/span&gt;, cellValue);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(tab + tab + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(tab + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/body&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; sb.ToString();           &lt;br /&gt;}           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Attachment&lt;/span&gt; GetCsvFile(&lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; data)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt; sb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataColumn&lt;/span&gt; dc &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; data.Columns)           &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; sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;{0},&amp;quot;&lt;/span&gt;, dc.ColumnName);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;\r\n&amp;quot;&lt;/span&gt;);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataRow&lt;/span&gt; dr &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; data.Rows)           &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:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;DataColumn&lt;/span&gt; dc &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; data.Columns)           &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; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; cellValue = dr[dc] != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; ? dr[dc].ToString() : &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;           &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; sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;{0},&amp;quot;&lt;/span&gt;, cellValue);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sb.AppendLine(&lt;span style="color:#a31515;"&gt;&amp;quot;\r\n&amp;quot;&lt;/span&gt;);           &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:#2b91af;"&gt;MemoryStream&lt;/span&gt; ms = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt; sw = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt;(ms, &lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt;.UTF8);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sw.Write(sb.ToString());           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sw.Flush();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ms.Seek(0, &lt;span style="color:#2b91af;"&gt;SeekOrigin&lt;/span&gt;.Begin);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Attachment&lt;/span&gt; att = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Attachment&lt;/span&gt;(ms, &lt;span style="color:#a31515;"&gt;&amp;quot;Report.csv&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; att;           &lt;br /&gt;          &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;ראשית נוודא האם רוצים לצרף כקובץ או לשלוח כחלק מה – body, במידה ואכן רוצים לשלוח כחלק מה – body, נקרא למתודת GetHtmlFromData, שרצה על הטבלה ומייצרת טבלת html שמתווספת ל – body של המייל, אחרת (כלומר ורצים את הדוח כקובץ מצורף) נוסיף למאפיין Attachments את הקובץ המגיע ממתודת GetCsvFile, הקוד במתודה זו מאוד דומה לקודמת, אבל בסוף נכניס את כל המידע לאובייקט מסוג MemeoryStream ונייצר אובייקט מסוג Attachment שיקבל את השם Report.csv.&lt;/p&gt;    &lt;p&gt;לאחר כל התהליך, נייצר את ה – SmtpClient שיקבל את המאפיינים מהאובייקט (או מהקונפיג) ונשלח את המייל.&lt;/p&gt;    &lt;p&gt;כדי להפעיל את כל הקוד, כל מה שנצטרך לעשות ב – Console Application לכתוב את הקוד הבא:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;try&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:#2b91af;"&gt;Worker&lt;/span&gt;.Execute();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; ex)           &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:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(ex.ToString());           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;כמובן שכדי שזה יעבוד הקונפיג צריך להיות מוגדר כמו שצריך.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;כדי להיות נחמד יותר ללקוח, החלטתי גם לכתוב אפליקציית UI שתאפשר מילוי של הערכים (ואפילו טעינה ושמירה שלהם לקובץ).&lt;/p&gt;    &lt;p&gt;לא נעבור כאן על הקוד (תוכלו כמובן להוריד את האפליקצייה) המסך נראה כך:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_56DB3541.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_144AD822.png" width="521" height="678" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1920355" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Encoding/default.aspx">Encoding</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/database/default.aspx">database</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DataReader/default.aspx">DataReader</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DataTable/default.aspx">DataTable</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/ADO/default.aspx">ADO</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/wpf/default.aspx">wpf</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/smtp/default.aspx">smtp</category></item><item><title>Basic C# - Random</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/19/basic-c-random.aspx</link><pubDate>Tue, 19 Mar 2013 19:24:12 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1812239</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1812239</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/19/basic-c-random.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;בעולם הפיתוח הרבה פעמים אנחנו צריכים מספרים אקראים, החל מפיתוח משחקים (קוביות, משחקי זיכרון, שולה מוקשים וכד’) עד לשימוש באלגורתימים להצפנה.&lt;/p&gt;    &lt;p&gt;בפוסט זה נלמד כיצד עובדים עם מספרים אקראיים, הדבר הראשון שנצטרך זה לכתוב את שורת הקוד הבאה:&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:13pt;font-family:consolas;background:white;color:black;"&gt;       &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Random&lt;/span&gt; rnd = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Random&lt;/span&gt;();&lt;/p&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;בשורה זו יצרנו אובייקט מסוג Random שתפקידו לייצר עבורנו מספרים אקראיים, נוכל להשתמש איתו בצורות הבאות:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:13pt;font-family:consolas;background:white;color:black;"&gt;       &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; n1 = rnd.Next();&lt;/p&gt;        &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; r2 = rnd.Next(100);&lt;/p&gt;        &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; r3 = rnd.Next(10, 30);&lt;/p&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;השורה הראשונה תחזיר משתנה מסוג int עם מספר אקראי שלם – כלומר מספר בין 0 ל – 2147483647, השורה הבאה תחזיר מספר בין 0 ל – 100, והשורה האחרונה תחזיר מספר בין 10 ל – 30.&lt;/p&gt;    &lt;p&gt;נראה כעת דוגמת קוד קצת יותר אמיתית, נגיד שיש לנו את קוד ה – xaml הבא:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;auto&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RowDefinition&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;          &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button &lt;font color="#ff0000"&gt;Click&lt;/font&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button_Click&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Add Rectangle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;          &lt;br /&gt;&lt;span style="color:#a31515;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Grid.Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot; &lt;font color="#ff0000"&gt;Height&lt;/font&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;900&amp;quot;&lt;/span&gt; &lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;900&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;can&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Background&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Silver&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;זה אמור לתת לנו את התמונה הבאה:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_7544D45D.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_7D1C2B25.png" width="392" height="261" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;נרצה שבזמן לחיצה על הלחצן יתווסף ריבוע בגודל אקראי בצבע אקראי במיקום אקראי, אחרי מספיק לחיצות נרצה לקבל תוצאה כזו:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_13BB2715.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_2A3D29C2.png" width="332" height="279" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;ראשית נראה כיצד מוסיפים ריבועים מקוד (בשלב זה ללא שום אקראיות)&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Button_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Rectangle&lt;/span&gt; rect = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Rectangle&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rect.Width = 50;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rect.Height = 50;           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rect.Fill = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.FromRgb(50, 147, 200));           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Canvas&lt;/span&gt;.SetTop(rect, 200);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Canvas&lt;/span&gt;.SetLeft(rect, 200);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; can.Children.Add(rect);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;בשורה הראשונה אנחנו יוצרים אובייקט מסוג Rectangle (מייצג ריבוע), לאחר מכן נגדיר את הרוחב והגובה, כעת ניתן לו צבע ונגדיר את המיקום שלו בתוך ה – canvas, הדבר האחרון שנעשה זה להוסיף את הקובייה, ל – canvas.&lt;/p&gt;    &lt;p&gt;הרצה של הקוד אמורה לתת את התוצאה הבאה:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_0E785232.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_498BE263.png" width="244" height="203" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;כעת בכל מקום שנתנו מספר נרצה לתת מספר אקראי והקוד יראה כך:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Button_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Random&lt;/span&gt; rnd = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Random&lt;/span&gt;();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Rectangle&lt;/span&gt; rect = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Rectangle&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rect.Width = rnd.Next((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)can.Width);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rect.Height = rnd.Next((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)can.Height);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; r = (&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;)rnd.Next(255);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; g = (&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;)rnd.Next(255);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; b = (&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;)rnd.Next(255);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rect.Fill = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.FromRgb(r, g, b));           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Canvas&lt;/span&gt;.SetTop(rect, rnd.Next((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)(can.Height - rect.Height)));           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Canvas&lt;/span&gt;.SetLeft(rect, rnd.Next((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)(can.Width - rect.Width)));           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; can.Children.Add(rect);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;בהשמה של הורחב והגובה, אנחנו מגדירים את המספר המקסימלי לרוחב והגובה של ה – Canvas, בהשמה של הצבע אנחנו מגדירים שלושה משתנים מסוג byte, היות שהפונקציה FromRgb מקבלת byte בלבד. ובסוף אנחנו מגדירים מיקום אקראי.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1812239" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>עבודה עם הדפדפן בפיתוח VsPlugIn</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/12/vsplugin.aspx</link><pubDate>Tue, 12 Mar 2013 18:01:43 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1795714</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1795714</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/12/vsplugin.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;כשמפתחים Visual Studio plugin, לפעמים נרצה לפתוח את הדפדפן הפנימי של Visual studio, ולנווט אותו לדף כלשהו.&lt;/p&gt;    &lt;p&gt;כדי לבצע זאת, נצטרך לקבל מופע של IVsWebBrowsingService (מתוך Microsoft.VisualStudio.Shell.Interop.dll, v7.1.40304.0), הדרך לקבל אותו היא בצורה דומה כפי שמקבלים הרבה שירותים פנימיים של הסביבה. בעזרת GetService&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#2b91af;"&gt;IVsWebBrowsingService&lt;/span&gt; wbSvc =           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (&lt;span style="color:#2b91af;"&gt;IVsWebBrowsingService&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;ServiceProvider&lt;/span&gt;.GlobalProvider.GetService(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;SVsWebBrowsingService&lt;/span&gt;));&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;כעת למשתנה wbSvc, יש מספר פונקציות, המאפשרות לגלוש בצורות שונות, כדאי לעבור עליהם, אנחנו נתמקד בפונקציה היוצרת דפדפן.&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt; guidNull = &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.Empty;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; dwCreateFlags = (&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;__VSCREATEWEBBROWSER&lt;/span&gt;.VSCWB_AutoShow | (&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;__VSCREATEWEBBROWSER&lt;/span&gt;.VSCWB_StartCustom;           &lt;br /&gt;          &lt;br /&gt;&lt;span style="color:#2b91af;"&gt;IVsWebBrowser&lt;/span&gt; browser;           &lt;br /&gt;&lt;span style="color:#2b91af;"&gt;IVsWindowFrame&lt;/span&gt; browserFrame;           &lt;br /&gt;wbSvc.CreateWebBrowser(dwCreateFlags, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; guidNull, &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, url, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; browser, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; browserFrame);&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;המשתנה dwCreateFlags מכיל את ההגדרה כיצד לייצר אותו, המשתנה browser מכיל (לאחר הקריאה של CreateWebBrowser) אובייקט שמאפשר להמשיך לנווט (כמובן שנשמור אותו כמשתנה גלובלי).&lt;/p&gt;    &lt;p&gt;המשתנה browserFrame מכיל את האובייקט שעוטף את הדפדפן&amp;#160; (איתו נוכל לסגור את החלון כשנרצה).&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הסיבה שבחרתי בדרך זו לייצר את הגלישה, היא מכיוון שבאחד מהפוסטים הבאים אדגים כיצד ניתן לגלוש ולהרשם מתוך ה – plugin לאירועים המתבצעים בתוך ה – html שאליו גלשנו.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1795714" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/AddIn/default.aspx">AddIn</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/VS/default.aspx">VS</category></item><item><title>קבלת הנתיב המלא באפליקציית MVC וב - WebForms</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/10/mvc-webforms.aspx</link><pubDate>Sun, 10 Mar 2013 11:05:11 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1790762</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1790762</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/10/mvc-webforms.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;לפעמים צריך לקבל נתיב מלא לכתובת אינטרנט, לדוגמא כדי לשלוח במייל.&lt;/p&gt;    &lt;p&gt;באפליקציית MVC הקוד יראה כך:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;UrlHelperExtension&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; AbsolutePath(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;UrlHelper&lt;/span&gt; url, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; virtualPath)           &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:#2b91af;"&gt;Uri&lt;/span&gt; requestUrl = url.RequestContext.HttpContext.Request.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:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;{0}://{1}{2}&amp;quot;&lt;/span&gt;,           &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;&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; requestUrl.Scheme,           &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;&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; requestUrl.Authority,           &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;&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; &lt;span style="color:#2b91af;"&gt;VirtualPathUtility&lt;/span&gt;.ToAbsolute(virtualPath));           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;ואילו השימוש יראה כך:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:11pt;font-family:consolas;background:white;color:black;"&gt;       &lt;p style="margin:0px;"&gt;Url.AbsolutePath(&lt;span style="color:#a31515;"&gt;&amp;quot;~/Controller/action&amp;quot;&lt;/span&gt;);&lt;/p&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;התוצאה תהיה כזאת “&lt;a title="http://localhost:7791/Controller/action" href="http://localhost:7791/Controller/action"&gt;http://localhost:7791/Controller/action&lt;/a&gt;” (כמובן שבסביבה האמיתית התוצאה תהיה מתאימה).&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;קוד מאוד דומה יהיה ב - WebForms&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; AbsolutePath(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HttpRequest&lt;/span&gt; request, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; virtualPath)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Uri&lt;/span&gt; requestUrl = request.Url;           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;{0}://{1}{2}&amp;quot;&lt;/span&gt;,           &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; requestUrl.Scheme,           &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; requestUrl.Authority,           &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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;VirtualPathUtility&lt;/span&gt;.ToAbsolute(virtualPath));           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הסיבה היחידה לא להשתמש באותה פונקציה גם ב – MVC, מכיוון שהמשתנה Url (שהוא מסוג UrlHelper) כבר מוגדר בכל ה – Views, וניתן להשתמש בו.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1790762" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Extension+Method/default.aspx">Extension Method</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/mvc/default.aspx">mvc</category></item><item><title>שאיבת משתמשים וקבוצות ממערכת ההפעלה</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/08/1786093.aspx</link><pubDate>Fri, 08 Mar 2013 07:28:40 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1786093</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1786093</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/08/1786093.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;לאחרונה התבקשתי להציג כיצד ניתן לשאוב את שמות המשתמשים וקבוצות ממערכת ההפעלה.&lt;/p&gt;    &lt;p&gt;כדי לבצע זאת צריך להוסיף reference ל - System.DirectoryServices.AccountManagement.&lt;/p&gt;    &lt;p&gt;הקוד יהיה פשוט ביותר, דוגמת הקוד הבאה תשאב את שמות הקבוצות&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; BindGroups()           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (Session[&lt;span style="color:#a31515;"&gt;&amp;quot;groups&amp;quot;&lt;/span&gt;] == &lt;span style="color:#0000ff;"&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:#2b91af;"&gt;PrincipalContext&lt;/span&gt; oPrincipalContext = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PrincipalContext&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ContextType&lt;/span&gt;.Machine);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;GroupPrincipal&lt;/span&gt; oGroupPrincipal = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GroupPrincipal&lt;/span&gt;(oPrincipalContext);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;PrincipalSearcher&lt;/span&gt; oPrincipalSearcher = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PrincipalSearcher&lt;/span&gt;(oGroupPrincipal);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;PrincipalSearchResult&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Principal&lt;/span&gt;&amp;gt; oPrincipalSearchResult = oPrincipalSearcher.FindAll();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Session[&lt;span style="color:#a31515;"&gt;&amp;quot;groups&amp;quot;&lt;/span&gt;] = oPrincipalSearchResult.ToList();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ddl.DataTextField = &lt;span style="color:#a31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ddl.DataSource = Session[&lt;span style="color:#a31515;"&gt;&amp;quot;groups&amp;quot;&lt;/span&gt;];           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ddl.DataBind();           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;(במאמר מוסגר – מסתבר שניתן לשאוב גם מה – Active Directory בלי צורך להגיע לשאילתות LDAP – וכל השינוי בקוד יהיה ה – ContextType)&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הקוד הבא יציג את כל המשתמשים של הקבוצה:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ddl_SelectedIndexChanged(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Principal&lt;/span&gt;&amp;gt; list = (&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Principal&lt;/span&gt;&amp;gt;)Session[&lt;span style="color:#a31515;"&gt;&amp;quot;groups&amp;quot;&lt;/span&gt;];           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Principal&lt;/span&gt; principal = list.FirstOrDefault(x =&amp;gt; x.Name == ddl.Text);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ddl2.DataTextField = &lt;span style="color:#a31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ddl2.DataSource = ((&lt;span style="color:#2b91af;"&gt;GroupPrincipal&lt;/span&gt;)principal).GetMembers(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ddl2.DataBind();           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1786093" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Windows/default.aspx">Windows</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/authentication/default.aspx">authentication</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/authorization/default.aspx">authorization</category></item><item><title>שליחת חלק מה – html למייל.</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/06/html.aspx</link><pubDate>Wed, 06 Mar 2013 10:23:52 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1782278</guid><dc:creator>Shlomo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1782278</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/06/html.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2011/06/09/attach-web-page-to-email.aspx"&gt;בעבר כתבתי על&lt;/a&gt; שליחת דף html מצורף למייל, כשהטכנולוגיה השלטת הייתה asp.net web forms, היום העולם כמובן השתנה, ואנחנו עובדים הרבה בצד הלקוח.&lt;/p&gt;    &lt;p&gt;הדרישה הנוכחית הייתה לשלוח קטע html מסויים למייל ללקוח.&lt;/p&gt;    &lt;p&gt;במידה ומספיק לשלוח את ה – html, ללא עיצוב הכול יותר פשוט, נניח שיש לנו את ה – html שנותן את התוצאה הבאה:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_23724FBC.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_6916D9DA.png" width="165" height="164" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;בלחיצה על הלחצן נכתוב את הקוד הבא: (בהנחה שאתם מכירים jQuery)&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; sendMail() {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; str = escape($(&lt;span style="color:#800000;"&gt;&amp;#39;#myDiv&amp;#39;&lt;/span&gt;).parent().html());           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; obj = { data: str };           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $.post(&lt;span style="color:#800000;"&gt;&amp;#39;home/send&amp;#39;&lt;/span&gt;, obj);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;הקוד ייקח את התוכן ה – html, נשתמש במתודת escape כדי לתמוך בעברית ולמנוע בעיות אבטחה ונשלח אותו לשרת.&lt;/p&gt;    &lt;p&gt;בצד השרת נכתוב את הקוד הבא (נשתמש בשרת של gmail לשלוח מיילים)&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Send(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; data)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; str = &lt;span style="color:#2b91af;"&gt;GlobalObject&lt;/span&gt;.unescape(data);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt; mm = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;from@server.co.il&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;to@server.com&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.Body = str;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.Subject = &lt;span style="color:#a31515;"&gt;&amp;quot;Mail from client&amp;quot;&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.IsBodyHtml = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SmtpClient&lt;/span&gt; smtp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SmtpClient&lt;/span&gt;();           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; smtp.Send(mm);           &lt;br /&gt;          &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;הפונקציה unescape מגיעה מ - Microsoft.JScript.dll.&lt;/p&gt;    &lt;p&gt;לאחר מכן נשלח פשוט את המייל, הגדרות ה – smtp יושבות בקונפיג.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.net&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;mailSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;smtp&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;network&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;host&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;smtp.gmail.com&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;port&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;587&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;userName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;USERNAME&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;enableSsl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;password&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;PASSWORD&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;smtp&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;mailSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.net&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;זהו קוד פשוט, אבל במקרה שנרצה לשלוח קוד html מעוצב בעזרת css, נצטרך לייצר קובץ אמיתי ולצרף אליו את תוכן ה – css, הקוד יראה כך:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Send(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; data)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; str = &lt;span style="color:#2b91af;"&gt;GlobalObject&lt;/span&gt;.unescape(data);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; css1 = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;style&amp;gt; {0} &amp;lt;/style&amp;gt; &amp;quot;&lt;/span&gt;,           &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;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.ReadAllText(Server.MapPath(&lt;span style="color:#a31515;"&gt;&amp;quot;~/Content/Site.css&amp;quot;&lt;/span&gt;)));           &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;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; all = css1 + str;           &lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; ms = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt; sw = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt;(ms);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sw.Write(all);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sw.Flush();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ms.Seek(0, &lt;span style="color:#2b91af;"&gt;SeekOrigin&lt;/span&gt;.Begin);           &lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt; mm = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MailMessage&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;from@server.co.il&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;to@server.com&amp;quot;&lt;/span&gt;);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.Body = &lt;span style="color:#a31515;"&gt;&amp;quot;This is a mail&amp;quot;&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.Subject = &lt;span style="color:#a31515;"&gt;&amp;quot;Mail from client&amp;quot;&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.IsBodyHtml = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; mm.Attachments.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Attachment&lt;/span&gt;(ms, &lt;span style="color:#a31515;"&gt;&amp;quot;file.html&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;));           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SmtpClient&lt;/span&gt; smtp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SmtpClient&lt;/span&gt;();           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; smtp.Send(mm);           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;כעת נקרא גם את תוכן קובץ ה – css שנרצה לצרף, ונייצר מחרוזת אחת גדולה עם תוכן ה – html/css.&lt;/p&gt;    &lt;p&gt;נכתובת את כל התוכן לתוך MemoryStream בעזרת StreamWriter, ולאחר מכן נצרף את התוכן למייל ונקרא לקובץ בשם file.html, כעת מי שיקבל את המייל יפתח את הקובץ, הוא יראה תוכן html מעוצב.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1782278" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/js/default.aspx">js</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/smtp/default.aspx">smtp</category></item><item><title>משימה שלישית עם (3) knockout</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/03/3-knockout.aspx</link><pubDate>Sun, 03 Mar 2013 14:18:47 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1776568</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1776568</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/03/03/3-knockout.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;בהמשך &lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/ko/default.aspx"&gt;לפוסטים הקודמים&lt;/a&gt; על KO, נראה הפעם עבודה עם ולידציות.&lt;/p&gt;    &lt;p&gt;נכתוב את ה – html הבא:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;table&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;tblContact&amp;quot;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;שם&lt;/span&gt;:&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: Name&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;אימייל&lt;/span&gt;:&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;email&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: Email&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;תוכן&lt;/span&gt; הפנייה:&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;textarea&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;rows&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;6&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: Content&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;textarea&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;colspan&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2&amp;quot;&amp;gt;&lt;/span&gt;           &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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;שליחה&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;click: sendContact&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;table&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;הקוד הנ”ל יביא לתוצאה הבאה:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_6DAB4515.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_7385E8AE.png" width="465" height="284" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;כעת נרצה לוודא שלחיצה על “שליחה” תפעיל ולידציות לפני השליחה האמיתית לשרת.&lt;/p&gt;    &lt;p&gt;כדי שזה יקרה נוסיף לפרוייקט את &lt;a href="https://github.com/ericmbarnard/Knockout-Validation"&gt;KO.Validation&lt;/a&gt; (כמובן שלפני זה נוודא שיש לנו &lt;a href="http://knockoutjs.com/"&gt;KO&lt;/a&gt;)&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;קוד ה – JS יראה כך:&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; contactViewModel = ko.validatedObservable(           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Name: ko.observable(&lt;span style="color:#800000;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;).extend({ required: &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt; }),           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Email: ko.observable(&lt;span style="color:#800000;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;).extend({ required: &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, email: &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt; }),           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Content: ko.observable(&lt;span style="color:#800000;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;).extend({ required: &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt; }),           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sendContact: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.isValid()) {           &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:#0000ff;"&gt;this&lt;/span&gt;.errors.showAllMessages(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);           &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:#0000ff;"&gt;return&lt;/span&gt;;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.post(urls.CONTACT, JSON.parse(ko.toJSON(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;)), &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (res) {           &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; &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; }           &lt;br /&gt;})&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;עבור כל המאפיינים השתמשנו במתודת extend שמקבלת פרמטרים שונים המגדירים את הולידציות על המאפיינים (&lt;a href="https://github.com/ericmbarnard/Knockout-Validation/wiki/Native-Rules"&gt;לפירוט המלא&lt;/a&gt;).&lt;/p&gt;    &lt;p&gt;בזמן הפעלת הפונקציה sendContact, יש שימוש בשני מתודות isValid, errors.showAllMessages, שני מתודות אלו התווספו למודל עקב יצירת המודל בעזרת פונקציית validatedObservable.&lt;/p&gt;    &lt;p&gt;במידה והמודל לא עבר ולידצייה, המסך יראה כך:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_3D34C09F.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_5794B3B6.png" width="497" height="224" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;ברירת המחדל של הודעות השגיאה הם כמובן באנגלית, &lt;a href="https://github.com/ericmbarnard/Knockout-Validation/blob/master/Localization/he-IL.js"&gt;כאן יש קובץ&lt;/a&gt; עבור עברית.&lt;/p&gt;    &lt;p&gt;במידה והכול עבר בהצלחה, נפנה לשרת ב – ajax עם המידע.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1776568" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JSON/default.aspx">JSON</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/js/default.aspx">js</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/ko/default.aspx">ko</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/knockout/default.aspx">knockout</category></item><item><title>your mini url</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/30/your-mini-url.aspx</link><pubDate>Wed, 30 Jan 2013 12:48:19 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1714251</guid><dc:creator>Shlomo</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1714251</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/30/your-mini-url.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/27/shortcut-url-tiny-url.aspx"&gt;כפי שהבטחתי&lt;/a&gt; בפוסט זה אספר על הפיתרון שאני בעזרת &lt;a href="http://sela.co.il/"&gt;מכללת סלע&lt;/a&gt; מציע.&lt;/p&gt;    &lt;p&gt;לפני הכול אציין שזו ביתא ראשונית, ויתכן באגים – כך שתקחו אותי בעדינות – אשמח כמובן לקבל פידבק –למייל: &lt;a href="mailto:shlomog@sela.co.il"&gt;shlomog@sela.co.il&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;המערכת שאנחנו מפתחים נקראת (לעת עתה) yourminiurl, והיא תומכת ברשימת הפיצ’רים הבאים.&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;חינמי לחלוטין למשתמשים רגילים (אין כרגע תמיכה לחברות או למשתמשים מתקדמים). &lt;/li&gt;      &lt;li&gt;שליטה מלאה על הכינוי. &lt;/li&gt;      &lt;li&gt;סטסטיסטיקות מלאות על השימוש. &lt;/li&gt;      &lt;li&gt;אפשרות לעריכה/מחיקה של קיצור הדרך. &lt;/li&gt;      &lt;li&gt;כניסה למערכת באמצעות Facebook/Microsoft או באמצעות שם משתמש וסיסמא. &lt;/li&gt;      &lt;li&gt;כמה חשבונות למשתמש אחד (מאפשר כמה קידומות לקיצור דרך – הסבר בהמשך). &lt;/li&gt;      &lt;li&gt;API מלא לייצר ולתשאל מקוד. (עדיין לא קיים) &lt;/li&gt;      &lt;li&gt;במידה ובעל החשבון מעוניין להציג פרסומת לפני הכניסה לאתר – יש באפשרותו להוסיף פרסומות (של בעל החשבון). (לא עובד במלואו). &lt;/li&gt;      &lt;li&gt;אפשרות להגדיר את הדומיין שלכם עבור הקידומת לקיצור הדרך (קיים חלקית). &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הכתובת לאתר היא: &lt;a title="http://yourminiurl.com/editor" href="http://yourminiurl.com/editor"&gt;http://yourminiurl.com/editor&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;המסך הראשון נראה כך (החלק החשוב):&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_14F65B8F.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_0B4DED59.png" width="478" height="427" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;בחרו במנגנון הכניסה העדיף עליכם (אין שום מידע שנשלף מפייסבוק או בממיקרוסופט, ובכל מקרה ניתן גם להכניס מייל וסיסמא)&lt;/p&gt;    &lt;p&gt;בפעם הראשונה לאחר הכניסה תגיעו למסך הבא:&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_1B0D825D.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_12A9AD06.png" width="463" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;במסך זה יש צורך לבחור את הקידומת, כלומר בהנחה שתבחרו בקידומת shlomo, ולאחר מכן תייצרו קיצור דרך בשם blog שיפנה לבלוג שלכם, קיצור הדרך יראה &lt;a href="http://yourminiurl.com/shlomo/blog"&gt;http://yourminiurl.com/shlomo/blog&lt;/a&gt; (כפי שכתבתי – ניתן להגדיר את הדומיין שלכם במקום &lt;a href="http://yourminiurl.com"&gt;http://yourminiurl.com&lt;/a&gt; הוראות חלקיות &lt;a href="http://www.yourminiurl.com/editor/help.aspx"&gt;כאן&lt;/a&gt;)&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;לאחר מכן תגיעו למסך יצירת קיצור דרך.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/image_38332A67.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shlomo/image_thumb_2B58D449.png" width="436" height="453" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;בקומבו של “חשבון” ניתן לבחור את החשבון עליו רוצים לעבוד (לכל משתמש אפשרי מספר חשבונות)&lt;/p&gt;    &lt;p&gt;הנושא מאפשר לסדר את הקיצורים במסך הסטטיסטיקות והעריכה.&lt;/p&gt;    &lt;p&gt;הכתובת היא הכתובת האמיתית.&lt;/p&gt;    &lt;p&gt;קיצור הדרך – זהו הכינוי, ניתן לבחור פרסמות.&lt;/p&gt;    &lt;p&gt;וזה הכול למעשה.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;יש עוד מסכים של עריכה/פרסומות/סטטיסטיקות ועוד.&lt;/p&gt;    &lt;p&gt;אני אשאיר לכם את הכיף בלשחק – ואודה לפידבק.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1714251" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category></item><item><title>SerializationInfo TryGetValue</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/29/serializationinfo-trygetvalue.aspx</link><pubDate>Tue, 29 Jan 2013 09:15:49 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1710315</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1710315</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/29/serializationinfo-trygetvalue.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;כתבתי מספר Extensions עבור מחלקת SerializationInfo.&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; System.Runtime.Serialization           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SerializationExtensions&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:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;SerializationEntry&lt;/span&gt;&amp;gt; AsEnumerator(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt; info)           &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; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; info)           &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;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; &lt;span style="color:#0000ff;"&gt;yield&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; item;           &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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; T TryGetValue&amp;lt;T&amp;gt;(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt; info, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name, T defaultValue = &lt;span style="color:#0000ff;"&gt;default&lt;/span&gt;(T))           &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; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; info)           &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;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; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (item.Name == 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;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (T)item.Value;           &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;br /&gt;          &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:#0000ff;"&gt;return&lt;/span&gt; defaultValue;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; T TryGetValue&amp;lt;T&amp;gt;(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt; info, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] names, T defaultValue = &lt;span style="color:#0000ff;"&gt;default&lt;/span&gt;(T))           &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; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; name &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; names)           &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;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; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; info)           &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; {           &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;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (item.Name == 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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (T)item.Value;           &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; }           &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;br /&gt;          &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:#0000ff;"&gt;return&lt;/span&gt; defaultValue;           &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; }           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;כעת ניתן לכתוב קוד כזה:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;]           &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MyClass&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;ISerializable&lt;/span&gt;           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Name { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; GetObjectData(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt; info, &lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt; context)           &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; info.AddValue(&lt;span style="color:#a31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, Name);           &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:#0000ff;"&gt;private&lt;/span&gt; MyClass(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt; info, &lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt; context)           &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; Name = info.TryGetValue&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] { &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;Name&amp;gt;k__BackingField&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt; });           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;המטרה של הקוד הנ”ל, היא כדי לאפשר בקלות להוציא את המידע במידה ועשיתם בעבר סריליזציה של המידע לפני שממשתם את הממשק ISerializable, מה שיגרום לכך שהשם יהיה השם של ה – backing field.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1710315" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Extension+Method/default.aspx">Extension Method</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Serialization/default.aspx">Serialization</category></item><item><title>shortcut url, tiny url</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/27/shortcut-url-tiny-url.aspx</link><pubDate>Sun, 27 Jan 2013 06:01:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1704555</guid><dc:creator>Shlomo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1704555</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/27/shortcut-url-tiny-url.aspx#comments</comments><description>&lt;div align="right" style="font-family:arial;font-size:16px;" dir="rtl"&gt;   &lt;p&gt;ישנם הרבה מאוד שירותים (חינמיים ובתשלום) של shortcut url,&amp;nbsp;&lt;/p&gt;&lt;p&gt;בפוסט זה ננסה להבין מה זה אומר, מה הבעיות שיש שבגללם צריך את הפיתרון, הפיתרונות הקימיים, ובפוסט הבא מהו הפיתרון שלי.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;מה זה אומר:&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;במשפט מאוד קצר, הרעיון מאחורי shortcut url מאפשר להגדיר עבור url אמיתי, כינוי כלשהו ולגלוש לכינוי במקום לדף עצמו ולמעשה להגיע לדף אמיתי.&lt;/p&gt;    &lt;p&gt;לדוגמא: בהנחה שיש לנו את הכתובת הבאה: &lt;a title="http://blogs.microsoft.co.il/blogs/shlomo/" href="http://blogs.microsoft.co.il/blogs/shlomo/"&gt;http://blogs.microsoft.co.il/blogs/shlomo/&lt;/a&gt; שזו הכתובת של הבלוג שלי, כמובן. הגדרתי עבורו (&lt;a href="http://goo.gl/"&gt;במנגנון של google&lt;/a&gt;) את הכינוי &lt;a title="http://goo.gl/LZZRv" href="http://goo.gl/LZZRv"&gt;http://goo.gl/LZZRv&lt;/a&gt;, כעת מי שיגלוש ללינק המקוצר יגיע למעשה לבלוג שלי (כמובן שבשורת הכתובת יראו תמיד את הכתובת האמיתית).&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;למה צריך את זה בכלל:&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;רשימה קצרה של דוגמאות למה שנרצה כזה שירות ומה נקבל מזה שנשתמש בזה.&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;היכולת שלנו להחזיק כתובת קצרה במקום כתובת ארוכה, זה עוזר במיילים, בהודעות טקסט (sms) בשמירה של נתונים (DB) וכמובן בזכירה של הכתובת (לגבי הזיכרון, זה בדרך כלל רלוונטי רק אם אפשר לשלוט על יצירת הכינוי)        &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;היכולת לשנות להיכן הכינוי מצביע, לדוגמא: בהנחה שלסלע יהיה קיצור דרך בשם &lt;a href="http://sela.co.il/sdp"&gt;http://sela.co.il/sdp&lt;/a&gt;, כשלמעשה הכינוי SDP לא יהיה דף אמיתי, אלא כינוי לדף אחר, בכל פעם שסלע תרצה לארגן כנס חדש, הם לא יצטרכו לשלוח כתובות חדשות, או לדאוג לכך שמישהו נכנס בטעות לאתר של הכנס הקודם, הרבה יותר פשוט יהיה, לשנות את ההפנייה של הכינוי SDP לאתר העדכני (כמובן לא עוזר במידה ומישהו העתיק את הכתובת האמיתית שמופיע בדפדפן).         &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;היכולת לקבל בקלות סטטיסטיקות מי ומהיכן הגיעו לעמוד (היות שכדי להגיע לעמוד האמיתי צריך לעבור דרך איזשהו מתווך, הוא יכול לעשות עוד כמה דברים בדרך – כמו למשל שמירת סטטיסטיקות).        &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;הרבה שירותים משתמשים בו לצורכי פרסומות (ולהרויח כסף – כמובן), בזמן מעבר לדף האמיתי, הגולש המסכן נאלץ להסתכל בפירסומת כלשהו, יש שירותים ברשת המאפשרים לכל אחד להרויח כסף על ידי יצירת קיצורי דרך דרכם, עבור כל גולש שאולץ להסתכל בפרסומת, יוצר קיצור הדרך מקבל X אחוזים.        &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;היכולת למחוק קיצורי דרך – בהינתן שרוב האנשים לא שומרים את הכתובת מהדפדפן, זאת דרך די טובה להעלים כתובות שאנחנו לא רוצים שיסתכלו עליהם יותר.        &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;חלק גדול מהשירותים הקיימים מאפשרים לייצר קיצורי דרך מקוד, (חושפים API) מה שכמובן נותן למפתחים יותר כוח). &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;הפתרונות הקיימים: &lt;/strong&gt;(הנפוצים שבהם)&lt;/p&gt;    &lt;div align="left" dir="ltr"&gt;     &lt;table cellspacing="0" cellpadding="0"&gt;         &lt;tr&gt;           &lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;            &lt;td&gt;&lt;strong&gt;URL&lt;/strong&gt;&lt;/td&gt;            &lt;td&gt;&lt;strong&gt;Features &amp;amp; Benefits&lt;/strong&gt;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;Google url shortener&lt;/td&gt;            &lt;td&gt;&lt;a href="http://goo.gl/"&gt;http://goo.gl/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Statistics&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;URL Masking&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Statistics&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Link Referrer reports&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Path Forwarding&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Sub.Sub.Domains&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Mirror management&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;No confusing characters ( 0, O, I, l, 1 )&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Preview&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;WWW support&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Frame Kill&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Non-Public WHOIS&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;bitly&lt;/td&gt;            &lt;td&gt;&lt;a href="https://bitly.com/"&gt;https://bitly.com/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Grouping&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Statistics&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Chrome Extension&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Public/Private&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Developers API&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Save by mail (email link to save@bitmark.me)&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;TinyURL &lt;/td&gt;            &lt;td&gt;&lt;a href="http://tinyurl.com/"&gt;http://tinyurl.com/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Preview&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;ow.ly&lt;/td&gt;            &lt;td&gt;&lt;a href="http://ow.ly/"&gt;http://ow.ly&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;File Uploading&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Developers API&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;Tiny&lt;/td&gt;            &lt;td&gt;&lt;a href="http://tiny.cc/"&gt;http://tiny.cc/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Statistics&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Custom URL&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Preview&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;QR Codes&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Link Referrer reports&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Traffic filter&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Link expiration&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Export links &amp;amp; stats&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Developers API&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;MacAfee&lt;/td&gt;            &lt;td&gt;&lt;a href="http://mcaf.ee/"&gt;http://mcaf.ee/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Secure Links&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;Cligs&lt;/td&gt;            &lt;td&gt;&lt;a href="http://cli.gs/"&gt;http://cli.gs/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Custom URL&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Statistics&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;Yep&lt;/td&gt;            &lt;td&gt;&lt;a href="http://yep.it/"&gt;http://yep.it/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Developers API&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;surf.to&lt;/td&gt;            &lt;td&gt;&lt;a href="http://www.surf.to/"&gt;http://www.surf.to/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Email Forwarding&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Multiple Addresses&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;thinfi &lt;/td&gt;            &lt;td&gt;&lt;a href="http://thinfi.com/"&gt;http://thinfi.com/&lt;/a&gt;&lt;/td&gt;            &lt;td&gt;Free&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;&amp;nbsp;&lt;/td&gt;            &lt;td&gt;Password Protection&lt;/td&gt;         &lt;/tr&gt;       &lt;/table&gt;   &lt;/div&gt;    &lt;p&gt;&amp;nbsp;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2009/11/21/shortcut-url-routing-asp-net.aspx"&gt;בעבר כתבתי&lt;/a&gt; את הדרך ב – net לייצר מנגנון שכזה, בפוסט הבא אספר על הפיתרון שאני (יחד עם סלע) מציעים ובמה הפיתרון שלנו&amp;nbsp;שונה מאחרים.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1704555" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category></item><item><title>DateTime in JSON</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/12/datetime-in-json.aspx</link><pubDate>Sat, 12 Jan 2013 22:14:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1656765</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1656765</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/12/datetime-in-json.aspx#comments</comments><description>&lt;div style="FONT-SIZE:16px;FONT-FAMILY:arial;" dir="rtl" align="right"&gt;
&lt;p&gt;אחד הדברים המעצבנים בעבודה עם ajax, זה הדרך שבה חוזר אובייקט DateTime.&lt;/p&gt;
&lt;p&gt;בהנחה שהאובייקט נראה כך:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Person&lt;/span&gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; MyProperty { &lt;span style="COLOR:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:#0000ff;"&gt;set&lt;/span&gt;; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt; Time { &lt;span style="COLOR:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:#0000ff;"&gt;set&lt;/span&gt;; } &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;ויש לנו Action הנראה כך:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;[&lt;span style="COLOR:#2b91af;"&gt;HttpGet&lt;/span&gt;] &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; JsonResult GetPerson() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; Json(&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Person&lt;/span&gt;() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyProperty = 2, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time = &lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;.Now &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;span style="COLOR:#2b91af;"&gt;JsonRequestBehavior&lt;/span&gt;.AllowGet); &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;כשנקרא ל – action בעזרת jQuery ajax:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;var&lt;/span&gt; personFromServer = &lt;span style="COLOR:#0000ff;"&gt;null&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR:#006400;"&gt;// Get data from server&lt;/span&gt; &lt;br /&gt;$.getJSON(&lt;span style="COLOR:#800000;"&gt;&amp;#39;home/GetPerson&amp;#39;&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;function&lt;/span&gt; (data) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; personFromServer = data; &lt;br /&gt;});&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;מה שנקבל בחזרה יראה:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;personFromServer = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyProperty: 2, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time: &lt;span style="COLOR:#800000;"&gt;&amp;quot;/Date(1358020217238)/&amp;quot;&lt;/span&gt; &lt;br /&gt;};&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;מה שבהחלט יכול להציק, מכיוון שצריך להמיר את המחרוזת לאובייקט Date של javascript.&lt;/p&gt;
&lt;p&gt;אחד מהחברה הטובים של&amp;nbsp;&lt;a href="https://live.roomixer.com/"&gt;roomixer&lt;/a&gt;&amp;nbsp;הפנה אותי לבעיה זו, והנה הפתרון שלנו.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;הבעיה נובעת מכך שהקוד הפנימי של Json יוצר אובייקט מסוג JavaScriptSerializer, ולא חושף אותו החוצה, במידה והם היו חושפים אותו החוצה ניתן היה להוסיף לו JavaScriptConverter עבור כל type שנרצה, ולכן ראשית נכתוב אובייקט חדש שיורש מ – JsonResult.&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JsonResultWithConverters&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;JsonResult&lt;/span&gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;JavaScriptConverter&lt;/span&gt;&amp;gt; Converters { &lt;span style="COLOR:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;set&lt;/span&gt;; } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; JsonResultWithConverters(&lt;span style="COLOR:#0000ff;"&gt;params&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JavaScriptConverter&lt;/span&gt;[] converters) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Converters = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;JavaScriptConverter&lt;/span&gt;&amp;gt;(converters); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; ExecuteResult(&lt;span style="COLOR:#2b91af;"&gt;ControllerContext&lt;/span&gt; context) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;HttpResponseBase&lt;/span&gt; response = context.HttpContext.Response; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(&lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.ContentType)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.ContentType = &lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.ContentType; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;else&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.ContentType = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;application/json&amp;quot;&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.ContentEncoding != &lt;span style="COLOR:#0000ff;"&gt;null&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.ContentEncoding = &lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.ContentEncoding; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.Data != &lt;span style="COLOR:#0000ff;"&gt;null&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;JavaScriptSerializer&lt;/span&gt; serializer = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JavaScriptSerializer&lt;/span&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.RegisterConverters(Converters); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.Write(serializer.Serialize(&lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.Data)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;למעשה העתקתי את כל הקוד של המימוש הפנימי של JsonResult (בעזרת &lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2010/09/24/what-is-reflector.aspx"&gt;relector&lt;/a&gt; כמובן), מה שהוספתי הוא שב – ctor של המחלקה אני מאפשר לשלוח מערך של JavaScriptConverter ובשורה אחת לפני האחרונה אני שולח אותם ל – JavaScriptSerializer. &lt;/p&gt;
&lt;p&gt;(על הדרך גם התפטרנו מהצורך לשלוח כל פעם את הערך AllowGet.)&lt;/p&gt;
&lt;p&gt;כעת הקוד יראה כך:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;[&lt;span style="COLOR:#2b91af;"&gt;HttpGet&lt;/span&gt;] &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JsonResult&lt;/span&gt; GetPerson() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JsonResultWithConverters&lt;/span&gt;(&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTimeJSONConverter&lt;/span&gt;()) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Data = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Person&lt;/span&gt;() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyProperty = 2, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time = &lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;.Now &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;מיד נראה את ה – Converter שלנו, אך בהינתן שהוא יודע להמיר תאריכים, הקוד אמור לעבוד עכשיו.&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTimeJSONConverter&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;JavaScriptConverter&lt;/span&gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Type&lt;/span&gt;&amp;gt; SupportedTypes &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;get&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Type&lt;/span&gt;&amp;gt;() { &lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;) }; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IDictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt;&amp;gt; Serialize(&lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; obj, &lt;span style="COLOR:#2b91af;"&gt;JavaScriptSerializer&lt;/span&gt; serializer) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt;&amp;gt;() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;, ((&lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;)obj).ToString(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;dd/MM/yyyy hh:mm:ss&amp;quot;&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; Deserialize(&lt;span style="COLOR:#2b91af;"&gt;IDictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt;&amp;gt; dictionary, &lt;span style="COLOR:#2b91af;"&gt;Type&lt;/span&gt; type, &lt;span style="COLOR:#2b91af;"&gt;JavaScriptSerializer&lt;/span&gt; serializer) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; str = dictionary[&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;].ToString(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;.Parse(str); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;המאפיין הראשון Supportedtypes מחזיר את כל ה – types שה – converter הנוכחי אחראי עליו (במקרה זה רק DateTime), &lt;/p&gt;
&lt;p&gt;המתודה השנייה נגיע אליה בזמן סרילזצייה, והיא תמיר את התאריך לפורמט שנרצה, המתדוה האחרונה נגיע אליה בזמן שיחזור ממחרזות, ונמיר בחזרה ל – DateTime, כעת כשנריץ מ – javscript נקבל:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;personFromServer = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyProperty: 2, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time: { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value: &lt;span style="COLOR:#800000;"&gt;&amp;#39;12/01/2013 10:34:37&amp;#39;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;};&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;הבעייה כרגע היא איך נחזיר את המידע לשרת, הרי הוא לא יודע שהוא צריך לעבוד עם ה – JavaScriptConverter שכתבנו.&lt;/p&gt;
&lt;p&gt;דרך אחת פשוטה היא להגדיר שהמתודה בצד השרת מקבלת מחרוזת ולא אובייקט, כך נוכל לייצר JSON לבד, הקוד בצד השרת יראה:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; SetPerson(&lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; person) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;JavaScriptSerializer&lt;/span&gt; jss = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JavaScriptSerializer&lt;/span&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jss.RegisterConverters(&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JavaScriptConverter&lt;/span&gt;[] { &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTimeJSONConverter&lt;/span&gt;() }); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;var&lt;/span&gt; obj = jss.Deserialize&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Person&lt;/span&gt;&amp;gt;(person); &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;ובצד הלקוח נשלח מחרוזת לשרת, כדי שיעשה המרה נכונה מהמחרוזת, &lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;$.post(&lt;span style="COLOR:#800000;"&gt;&amp;#39;home/SetPerson&amp;#39;&lt;/span&gt;, { person: JSON.stringify(person) });&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;כעת כשהמידע יגיע לשרת בצורת מחרוזת, הוא יגיע למתודה שלנו ואנחנו נדאג להמיר אותו בצורה הנכונה בעזרת ה – Converter שלנו.&lt;/p&gt;
&lt;p&gt;כמובן שזאת דרך שאנחנו לא אוהבים, אנחנו מעדיפים שזה יעבוד בצורה אוטומטית, במידה והיינו עובדים עם WebService, היה פשוט אפשר להוסיף בקונפיג את הקוד הבא:&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;system.web.extensions&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;scripting&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;webServices&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;jsonSerialization&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;converters&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;add&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt; &lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:#0000ff;"&gt;DateTimeConverter&lt;/span&gt;&amp;quot;&lt;span style="COLOR:#0000ff;"&gt; &lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:#0000ff;"&gt;MvcApplication4.Controllers.DateTimeJSONConverter&lt;/span&gt;&amp;quot;&lt;span style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;converters&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;jsonSerialization&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;webServices&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;scripting&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;system.web.extensions&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;ובהנחה שעל ה – WebService יהיה את ScriptServiceAttribute, ה – converter שלנו יעבוד אוטומטית בלי צורך לעשות כלום (בשני הכיוונים), אבל ב – action של mvc זה לא עובד כך.&lt;/p&gt;
&lt;p&gt;כדי לפתור זאת גם ב – mvc נוסיף model binder, זה מאפשר לנו לשלוט על הדרך בה אנחנו מפרסרים את המידע שמתקבל מצד הלקוח, הקוד יהיה כזה&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTimeModelBinder&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;IModelBinder&lt;/span&gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; BindModel(&lt;span style="COLOR:#2b91af;"&gt;ControllerContext&lt;/span&gt; controllerContext, &lt;span style="COLOR:#2b91af;"&gt;ModelBindingContext&lt;/span&gt; bindingContext) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; name = bindingContext.ModelName; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;.Parse(bindingContext.ValueProvider.GetValue(name + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;[Value]&amp;quot;&lt;/span&gt;).AttemptedValue); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;כמובן שכדי לדאוג שנגיע למימוש בכל פעם שיש DateTime מצד הלקוח, נרשום אותו ב – global.asax, כפי שמיד נראה.&lt;/p&gt;
&lt;p&gt;לפני כן נשים לב למשתנה name הערך שלו יהיה Time, וכדי להוציא את הערך הפנימי מוסיפים לו את המילה Value (שזה השם של המשתנה ב – Dictionary שהוכנס בתהליך הסירלזציה.&lt;/p&gt;
&lt;p&gt;את השורה הבאה צריך לרשום ב – Application_Start&lt;/p&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT:#000080 1px solid;BORDER-BOTTOM:#000080 1px solid;COLOR:#000;BORDER-LEFT:#000080 1px solid;"&gt;
&lt;div style="FONT-FAMILY:verdana, tahoma, arial, sans-serif;BACKGROUND:#000080;FONT-WEIGHT:bold;COLOR:#fff;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="OVERFLOW:auto;PADDING-BOTTOM:2px;PADDING-TOP:2px;PADDING-LEFT:5px;PADDING-RIGHT:5px;BACKGROUND-COLOR:#ffffff;"&gt;&lt;span style="COLOR:#2b91af;"&gt;ModelBinders&lt;/span&gt;.Binders.Add(&lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;DateTime&lt;/span&gt;), &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DateTimeModelBinder&lt;/span&gt;());&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1656765" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/WebService/default.aspx">WebService</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JSON/default.aspx">JSON</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Serialization/default.aspx">Serialization</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/js/default.aspx">js</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/mvc/default.aspx">mvc</category></item><item><title>Get Selected Text and Position – VS plug in</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/09/get-selected-text-and-position-vs-plug-in.aspx</link><pubDate>Wed, 09 Jan 2013 06:45:37 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1643762</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shlomo/rsscomments.aspx?PostID=1643762</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shlomo/archive/2013/01/09/get-selected-text-and-position-vs-plug-in.aspx#comments</comments><description>&lt;div style="font-size:16px;font-family:arial;" dir="rtl" align="right"&gt;   &lt;p&gt;לפעמים צריך בתוך vs plug in לקבל את ה – selected text והמיקום שלו.&lt;/p&gt;    &lt;p&gt;הדרך הפשוטה לכאורה לקבל את המידע היא השורה הבאה:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#2b91af;"&gt;DTE2&lt;/span&gt; dte = (&lt;span style="color:#2b91af;"&gt;DTE2&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;ServiceProvider&lt;/span&gt;.GlobalProvider.GetService(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;DTE&lt;/span&gt;));           &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; &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (dte.ActiveDocument != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)           &lt;br /&gt;{           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; selection = (EnvDTE.&lt;span style="color:#2b91af;"&gt;TextSelection&lt;/span&gt;)dte.ActiveDocument.Selection;&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;די בקלות אפשר להוציא את הטקסט הנבחר, אבל זה ממש לא פשוט לדעת את ה – index המדוייק שהטקסט מתחיל ומסתיים, &lt;a href="http://msdn.microsoft.com/en-us/library/envdte.textselection.activepoint.aspx"&gt;לקריאה נוספת&lt;/a&gt; איך בכל זאת לעשות זאת. &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הדרך הקלה יותר היא זאת:&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;         &lt;p&gt;&lt;span style="color:#2b91af;"&gt;IVsTextView&lt;/span&gt; textView = GetTextView(dte);             &lt;br /&gt;            &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; selectedText;             &lt;br /&gt;textView.GetSelectedText(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; selectedText);             &lt;br /&gt;            &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; piAnchorLine, piAnchorCol, piEndLine, piEndCol;             &lt;br /&gt;textView.GetSelection(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; piAnchorLine, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; piAnchorCol, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; piEndLine, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; piEndCol);             &lt;br /&gt;            &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; startPosition, virtualPosition;             &lt;br /&gt;textView.GetNearestPosition(piAnchorLine, piAnchorCol, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; startPosition, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; virtualPosition);&lt;/p&gt;         &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; endPosition;           &lt;br /&gt;textView.GetNearestPosition(piEndLine,piEndCol, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; endPosition, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; virtualPosition);           &lt;p&gt;           &lt;br /&gt;&lt;span style="color:#2b91af;"&gt;TextSelection&lt;/span&gt; textSelection = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TextSelection&lt;/span&gt;()             &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Text = selectedText,             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; StartIndex = startPosition &amp;lt; endPosition ? startPosition : endPosition,             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EndIndex = startPosition &amp;lt; endPosition ? endPosition : startPosition            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;};&lt;/p&gt;       &lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p&gt;ראשית נקבל אובייקט מסוג IVsTextView (בהמשך נראה את המימוש), לאחר מכן נפעיל את פונקציית GetSelectedText ונקבל את הטקסט הנבחר.&lt;/p&gt;    &lt;p&gt;כדי לקבל את השורה והעמודה שהטקסט מתחיל ומסתיים, נפעיל את פונקציית GetSelection, ולבסוף כדי לקבל את המיקום המדוייק, נשתמש ב – GetNearestPosition.&lt;/p&gt;    &lt;p&gt;במידה והמשתמש בחר את הטקסט מימין לשמאל – ה – startPosition יהיה גדול מה – endPosition, ולכן נהפוך ביניהם.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;הדבר האחרון שנשאר לראות הוא – כיצד מקבלים TextView מתוך ActiveDocument, למעשה יש כמה דרכים, &lt;a href="http://stackoverflow.com/questions/2413530/find-an-ivstextview-or-iwpftextview-for-a-given-projectitem-in-vs-2010-rc-exten"&gt;כאן מצאתי&lt;/a&gt; אחת קצרה&lt;/p&gt;    &lt;div dir="ltr" align="left"&gt;     &lt;p&gt;&lt;/p&gt;      &lt;div style="font-size:10pt;border-top:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right:#000080 1px solid;border-bottom:#000080 1px solid;color:#000;border-left:#000080 1px solid;"&gt;       &lt;div style="font-family:verdana, tahoma, arial, sans-serif;background:#000080;font-weight:bold;color:#fff;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;"&gt;Code Snippet&lt;/div&gt;        &lt;div style="overflow:auto;padding-bottom:2px;padding-top:2px;padding-left:5px;padding-right:5px;background-color:#ffffff;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IVsTextView&lt;/span&gt; GetTextView(&lt;span style="color:#2b91af;"&gt;DTE2&lt;/span&gt; dte)           &lt;br /&gt;{           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;ServiceProvider&lt;/span&gt; sp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ServiceProvider&lt;/span&gt;((Interop.IServiceProvider)dte);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IVsUIHierarchy&lt;/span&gt; uiHierarchy;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; itemID;           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IVsWindowFrame&lt;/span&gt; windowFrame;           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;VsShellUtilities&lt;/span&gt;.IsDocumentOpen(sp, dte.ActiveDocument.FullName,           &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;&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;&amp;#160; &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.Empty, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; uiHierarchy,           &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;&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;&amp;#160; &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; itemID, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; windowFrame);           &lt;br /&gt;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IVsTextView&lt;/span&gt; textView = &lt;span style="color:#2b91af;"&gt;VsShellUtilities&lt;/span&gt;.GetTextView(windowFrame);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; textView;           &lt;br /&gt;}&lt;/div&gt;     &lt;/div&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1643762" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/AddIn/default.aspx">AddIn</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/VS/default.aspx">VS</category></item></channel></rss>