<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkIDRXw_fSp7ImA9Wx5QGEg.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205</id><updated>2010-09-07T12:22:54.245+01:00</updated><title>Matt's Software Blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.matthewedmondson.info/" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/matthewedmondson/Erzm" /><feedburner:info uri="matthewedmondson/erzm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A0EMRHY4cSp7ImA9Wx5QEkU.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-8322333009356705132</id><published>2010-08-31T22:21:00.000+01:00</published><updated>2010-08-31T22:21:25.839+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-31T22:21:25.839+01:00</app:edited><title>The difference between validation and verification</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;This one is kind of a rant. &amp;nbsp;There is a subtle difference between the two key words &lt;b&gt;validation&lt;/b&gt; and&amp;nbsp;&lt;b&gt;verification&lt;/b&gt;.&amp;nbsp;They are not the same thing, and the&amp;nbsp;difference&amp;nbsp;is taught as low as GCSE IT level.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;I just felt like I needed to say that as there is a lot of &lt;i&gt;"validate this"&lt;/i&gt; and &lt;i&gt;"validate that"&lt;/i&gt;&amp;nbsp;knocking around when in fact verification is what is required. &amp;nbsp;Don't know the difference?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Lets clear this up:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"&gt;&lt;ul style="line-height: 1.5em; list-style-image: url(http://bits.wikimedia.org/skins-1.5/vector/images/bullet-icon.png?1); list-style-type: square; margin-bottom: 0.5em; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li&gt;Valid&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;ation: The process of&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;checking of data to ensure that it is acceptable for it or not&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;Verification: The process of checking of data to ensure that it is the correct value&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So when you go down to the ATM and enter your PIN to get cash out its important to understand that any four digit number you type on the keyboard is in fact valid, whereas after checking it is actually yours means it has been verified.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Just so that no one gets this mixed up here are some more examples:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;table border="1" cellpadding="5px" cellspacing="0" style="border-width: 0px;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password
&lt;/td&gt;
&lt;td&gt;Any text at least 7 characters
&lt;/td&gt;
&lt;td&gt;Comparison with actual password
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phone number
&lt;/td&gt;
&lt;td&gt;Correct amount of numbers between 0 - 9
&lt;/td&gt;
&lt;td&gt;Dialling gets through to the right person
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Television channel
&lt;/td&gt;
&lt;td&gt;Any number of correct length
&lt;/td&gt;
&lt;td&gt;Selecting the channel you wanted
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For those who should know better &lt;a href="http://www.regular-expressions.info/"&gt;Regular Expressions&lt;/a&gt; are for validation (thats all they do) and not verification!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I finally have somewhere to point those people who mean one thing, but say another...&lt;/div&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-8322333009356705132?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mPAAWO_vWZo0Byb_4qLmESWqrQg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mPAAWO_vWZo0Byb_4qLmESWqrQg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mPAAWO_vWZo0Byb_4qLmESWqrQg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mPAAWO_vWZo0Byb_4qLmESWqrQg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/T2nbicuEuvY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/8322333009356705132/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2010/08/difference-between-validation-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/8322333009356705132?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/8322333009356705132?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/T2nbicuEuvY/difference-between-validation-and.html" title="The difference between validation and verification" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2010/08/difference-between-validation-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIERXozeip7ImA9Wx5QE0g.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-1414466346598291563</id><published>2010-05-25T10:29:00.000+01:00</published><updated>2010-09-01T16:21:44.482+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-01T16:21:44.482+01:00</app:edited><title>Internet Explorer window.close(); does not work after print preview</title><content type="html">It appears that a call to window.close(); or self.close(); doesn't do a single thing after opening print preview in Internet Explorer. &amp;nbsp;Apparently this bug goes from versions 6 - 8 (9 has yet to be released). &amp;nbsp;If anyone has any work&amp;nbsp;arounds for this bug I would be very greatful. &amp;nbsp;It astounds me that such a simple bug can span multiple releases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-1414466346598291563?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qawQz1wA6WPyYKO3WrNMqGEgQDs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qawQz1wA6WPyYKO3WrNMqGEgQDs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qawQz1wA6WPyYKO3WrNMqGEgQDs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qawQz1wA6WPyYKO3WrNMqGEgQDs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/7bku1NMtkpw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/1414466346598291563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2010/05/internet-explorer-windowclose-does-not.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1414466346598291563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1414466346598291563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/7bku1NMtkpw/internet-explorer-windowclose-does-not.html" title="Internet Explorer window.close(); does not work after print preview" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2010/05/internet-explorer-windowclose-does-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcDSX0zfyp7ImA9WxFXFkQ.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-1086706367501385230</id><published>2010-05-24T11:14:00.000+01:00</published><updated>2010-05-24T11:14:38.387+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-24T11:14:38.387+01:00</app:edited><title>Overlooking the security aspect of the query string</title><content type="html">Recently whilst debugging a mission&amp;nbsp;critical, public facing, financial web application I&amp;nbsp;uncovered&amp;nbsp;a very serious security hole.&lt;br /&gt;
&lt;br /&gt;
As one of its features the application contained a content management system so that&amp;nbsp;relevant&amp;nbsp;departments&amp;nbsp;can upload and change content which appears on carefully selected parts of the site. &amp;nbsp;This meant that certain folders must be open to the&amp;nbsp;departments which are available&amp;nbsp;to be edited through the system. &amp;nbsp;The folder currently being worked on was contained in the query string.&lt;br /&gt;
&lt;br /&gt;
For those that do not know what the query string is here is an example. &amp;nbsp;When you google something, for example 'blog' the page you are sent to is&amp;nbsp;&lt;a href="http://www.google.co.uk/search?q=blog"&gt;http://www.google.co.uk/search?q=blog&lt;/a&gt;. That bit after the ? is called the query string (in this case&amp;nbsp;q=blog) which contains my search. &amp;nbsp;I can do what I want with this string and resubmit it. &amp;nbsp;So if I change the query string to q=blogspot and submit it, I am returned the google results for 'blogspot'. &amp;nbsp;Anyone can manipulate the query string.&lt;br /&gt;
&lt;br /&gt;
In the web application this meant that anyone could simply change the query string, and that would change the folder currently being worked on. &amp;nbsp;Only a few guesses are needed to view the contents of restricted folders. &amp;nbsp;Doing this I managed to download the full source code for the application, something which would be very valuable to an attacker...&lt;br /&gt;
&lt;br /&gt;
So if in doubt use server side variables instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-1086706367501385230?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/f-RiCh35hvGdxsUrwN_GIaLA1VY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f-RiCh35hvGdxsUrwN_GIaLA1VY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/f-RiCh35hvGdxsUrwN_GIaLA1VY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f-RiCh35hvGdxsUrwN_GIaLA1VY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/RYYDfROXzcw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/1086706367501385230/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2010/05/overlooking-security-aspect-of-query.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1086706367501385230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1086706367501385230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/RYYDfROXzcw/overlooking-security-aspect-of-query.html" title="Overlooking the security aspect of the query string" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2010/05/overlooking-security-aspect-of-query.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8DRng6cCp7ImA9Wx5QEkU.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-8912124959095987226</id><published>2010-01-19T11:02:00.000Z</published><updated>2010-08-31T21:01:17.618+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-31T21:01:17.618+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.net validation control custom user" /><title>Validatation for Custom User Controls</title><content type="html">Recently I stumbled across the problem of needing to validate user input supplied to a Custom User Control. &amp;nbsp;Usually validation is simply the case of dragging one of the excellent&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx"&gt;validation controls&lt;/a&gt;&amp;nbsp;onto the page and pointing it towards the control you wish to validate.&lt;br /&gt;
&lt;br /&gt;
Custom User Control's however are a different story. &amp;nbsp;These are controls written by a developer to carry out a function which no other existing controls can. &amp;nbsp;As they have been written from the ground up, they cannot be simply associated to a validation control without further work.&lt;br /&gt;
&lt;br /&gt;
To allow a Custom User Control to be validated the first thing which is required is the addition of&amp;nbsp;&amp;lt;ValidationPropertyAttribute("value")&amp;gt;. &amp;nbsp;This specifies the property which supplies the string to be validated, where "value" is the name of the property.&lt;br /&gt;
&lt;br /&gt;
Secondly the ControlToValidate="" property of validation control on the page should be the ID of the user control, colon(:), then the ID of the control to which 'value' is associated.&lt;br /&gt;
&lt;br /&gt;
For example I had a control named cboTask which had&amp;nbsp;&amp;lt;ValidationPropertyAttribute("value")&amp;gt; defined within it where value was a property which returned the current value of a DropDownList (DropDownList1) which was contained within cboTask. &amp;nbsp;In order to validate that the user selected an option I used the &lt;a href="http://msdn.microsoft.com/en-us/library/5hbw267h(VS.80).aspx"&gt;RequiredFieldValidator&lt;/a&gt; with the ControlToValidate="cboTask:DropDownList1".&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;ValidationPropertyAttribute(&lt;span class="str"&gt;"value"&lt;/span&gt;)&amp;gt; _&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;Partial &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; ctlDropDownList&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; System.Web.UI.UserControl&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; value() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Return&lt;/span&gt; DropDownList1.SelectedValue.Trim()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; llistitem &lt;span class="kwrd"&gt;As&lt;/span&gt; ListItem&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            DropDownList1.ClearSelection()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; llistitem &lt;span class="kwrd"&gt;In&lt;/span&gt; DropDownList1.Items&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                &lt;span class="kwrd"&gt;If&lt;/span&gt; RTrim(llistitem.Value) = RTrim(value) &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    llistitem.Selected = &lt;span class="kwrd"&gt;True&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;For&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Next&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; Class&lt;/pre&gt;

&lt;/div&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:RequiredFieldValidator&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="rfvTask"&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;       &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;       &lt;span class="attr"&gt;ErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;="Task cannot be blank"&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;       &lt;span class="attr"&gt;InitialValue&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;       &lt;span class="attr"&gt;ControlToValidate&lt;/span&gt;&lt;span class="kwrd"&gt;="cboTask:DropDownList1"&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="attr"&gt;ValidationGroup&lt;/span&gt;&lt;span class="kwrd"&gt;="page"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;*&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:RequiredFieldValidator&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Doing this allows both client and server validation, and allows you to use the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx"&gt;validation controls&lt;/a&gt;&amp;nbsp;as you would with any of the existing .NET controls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-8912124959095987226?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1To4rgvfOs-OCFKaoIFOfzOA_1I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1To4rgvfOs-OCFKaoIFOfzOA_1I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1To4rgvfOs-OCFKaoIFOfzOA_1I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1To4rgvfOs-OCFKaoIFOfzOA_1I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/98uaGocQn7E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/8912124959095987226/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2010/01/validatation-for-custom-user-controls.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/8912124959095987226?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/8912124959095987226?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/98uaGocQn7E/validatation-for-custom-user-controls.html" title="Validatation for Custom User Controls" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2010/01/validatation-for-custom-user-controls.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMNQH4yeyp7ImA9Wx5QEkU.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-5536189728023099572</id><published>2009-12-14T10:49:00.000Z</published><updated>2010-08-31T20:38:11.093+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-31T20:38:11.093+01:00</app:edited><title>Preventing an error 403 ever reaching the client</title><content type="html">&lt;div class="MsoNormal"&gt;
I was put in the strange position of preventing an ASP.net web application sending an error HTTP 403 to the client. &amp;nbsp;This was following 'security recommendations from the experts' that an error 403 confirms to an attacker that they have identified a part of the file structure.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Anyway this is how I managed to do it.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Add an Application_Error method to Global.asax which directs the user to a known page:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Application_Error(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                Response.Redirect(&lt;span class="str"&gt;"Default.aspx"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
and configure IIS custom error page to direct to a non-existing page,&amp;nbsp; this will show in the logs so choose something like /AttemptToAccess403.aspx.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
When the server encounters a 403 it will look up the non-existing page which will cause an error in the application.&amp;nbsp; This is caught via the Application_Error method and will direct the user to a valid page (Default.aspx).&amp;nbsp; To the user this is invisible, however the server has logged the attempt to access a directory structure (403) as an attempt to access page /AttemptToAccess403.aspx and an error 403 is never propogated to the client and hence satisfies the security requirement.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;u style="text-decoration: none;"&gt;Headers returned to the client:&lt;/u&gt;&lt;br /&gt;
&lt;u style="text-decoration: none;"&gt;&lt;br /&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
(before)&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;HTTP/1.x 301 Moved Permanently&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;&lt;span style="font-weight: 800;"&gt;HTTP/1.x 302 Found&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-weight: 800;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;div class="MsoNormal" style="display: inline !important;"&gt;
&lt;b&gt;&lt;div class="MsoNormal" style="display: inline !important;"&gt;
&lt;div style="display: inline !important;"&gt;
&lt;span style="font-weight: normal;"&gt;(after)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;div class="MsoNormal" style="display: inline !important;"&gt;
&lt;/div&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;b&gt;&lt;div class="MsoNormal"&gt;
&lt;span style="font-weight: normal;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;HTTP/1.x 200 OK&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-weight: normal;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&lt;span style="font-weight: 800;"&gt;HTTP/1.x 200 OK&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&lt;span style="font-weight: 800;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;div class="MsoNormal" style="display: inline !important;"&gt;
&lt;div style="display: inline !important;"&gt;
&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;b&gt;&lt;div class="MsoNormal" style="display: inline !important;"&gt;
&lt;div style="display: inline !important;"&gt;
&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;As for the initial 'security' concern....&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-5536189728023099572?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NFLFiLfIBlO-ge8Ff8MECsMGRaI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NFLFiLfIBlO-ge8Ff8MECsMGRaI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NFLFiLfIBlO-ge8Ff8MECsMGRaI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NFLFiLfIBlO-ge8Ff8MECsMGRaI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/J5D3ycEvQfI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/5536189728023099572/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/12/preventing-error-403-ever-reaching.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/5536189728023099572?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/5536189728023099572?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/J5D3ycEvQfI/preventing-error-403-ever-reaching.html" title="Preventing an error 403 ever reaching the client" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/12/preventing-error-403-ever-reaching.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4NQHw-eip7ImA9WxNaGEk.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-3515764901037695072</id><published>2009-12-03T12:56:00.000Z</published><updated>2009-12-03T12:56:31.252Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T12:56:31.252Z</app:edited><title>ASP Menu bug in IE8 and Chrome</title><content type="html">Well it turns out there is a bug in the ASP Menu control that stops the dynamic part of the menu rendering when the user rolls their mouse over a static part of the menu.&lt;br /&gt;
&lt;br /&gt;
It appears the problem is to do with the way the control checks if the browser has javascript enabled, and it decides both IE 8 and Chrome don't, hence nothing is shown to the user.&lt;br /&gt;
&lt;br /&gt;
The only work arounds I've come&amp;nbsp;across&amp;nbsp;are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Don't use the thing&lt;/li&gt;
&lt;li&gt;Put IE8 into compatibility mode (or download &lt;a href="http://support.microsoft.com/kb/962351"&gt;this hotfix&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use this &lt;a href="http://blog.the-dargans.co.uk/2008/09/getting-aspnet-menus-to-work-with.html"&gt;nasty hack around&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Obviously we cannot expect our users to have to follow special procedures to view our site, and with the only other solution being a hack, we'd rather go with something else completely...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-3515764901037695072?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Tyj_v2IfIOSUfoWVNHvRLH96f3Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tyj_v2IfIOSUfoWVNHvRLH96f3Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Tyj_v2IfIOSUfoWVNHvRLH96f3Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tyj_v2IfIOSUfoWVNHvRLH96f3Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/0YSh42DU2rE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/3515764901037695072/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/12/asp-menu-bug-in-ie8-and-chrome.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/3515764901037695072?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/3515764901037695072?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/0YSh42DU2rE/asp-menu-bug-in-ie8-and-chrome.html" title="ASP Menu bug in IE8 and Chrome" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/12/asp-menu-bug-in-ie8-and-chrome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cAR387eSp7ImA9Wx5QFEg.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-155039130844201713</id><published>2009-11-23T16:29:00.000Z</published><updated>2010-09-02T20:17:26.101+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T20:17:26.101+01:00</app:edited><title>Regular Expressions are fun</title><content type="html">I've finally made the effort to fully understand how to write my own regular expressions. &amp;nbsp;In the past I just had no idea what something as cryptic as&amp;nbsp;&lt;b&gt;^.+[a-zA-Z][a-zA-Z]\d\d\d\d\d\d.+?.pdf|^.+\w+\.xml&lt;/b&gt;&amp;nbsp;(I just wrote that) meant.&lt;br /&gt;
&lt;br /&gt;
Plugging that into my application now means that it fully validates my input, and does it perfectly. &amp;nbsp;How did we manage before these things were invented?&lt;br /&gt;
&lt;br /&gt;
If you want to learn more about regular expressions then take a look &lt;a href="http://www.regular-expressions.info/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-155039130844201713?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x8AzLCjTeEImUUsTmG3f3rd2cqI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x8AzLCjTeEImUUsTmG3f3rd2cqI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x8AzLCjTeEImUUsTmG3f3rd2cqI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x8AzLCjTeEImUUsTmG3f3rd2cqI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/Qc1Uq0a1v0M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/155039130844201713/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/11/regular-expressions-are-fun.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/155039130844201713?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/155039130844201713?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/Qc1Uq0a1v0M/regular-expressions-are-fun.html" title="Regular Expressions are fun" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/11/regular-expressions-are-fun.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYASHc5cSp7ImA9Wx5QEkU.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-9110220415588191109</id><published>2009-11-04T10:14:00.000Z</published><updated>2010-08-31T20:49:09.929+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-31T20:49:09.929+01:00</app:edited><title>Using the @MasterType directive instead of the @Page directive with MasterPageFile=""</title><content type="html">Just a quick snippet for future use. &amp;nbsp;When referencing a master page within your aspx file its best to use the @MasterType directive rather than the MasterPageFile="" attribute of the @Page directive. &amp;nbsp;Doing so will allow strongly typed access to any methods you've put in the master page rather than having to do something ugly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="csharpcode"&gt;((DefaultLayout)&lt;span class="kwrd"&gt;this&lt;/span&gt;.Master).SetPageHeading(&lt;span class="str"&gt;"This heading is set from inside Default.aspx"&lt;/span&gt;);&lt;/pre&gt;
&lt;div&gt;
&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;becomes:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class="csharpcode"&gt;Master.SetPageHeading(&lt;span class="str"&gt;"This heading is set from inside Default.aspx"&lt;/span&gt;);&lt;/pre&gt;
&lt;div&gt;
&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Geneva, Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;Much better dont you think?&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-9110220415588191109?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ce2Q032OC8QEkUMAR0IvJ1usZxk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ce2Q032OC8QEkUMAR0IvJ1usZxk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ce2Q032OC8QEkUMAR0IvJ1usZxk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ce2Q032OC8QEkUMAR0IvJ1usZxk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/PMSjlIbBmYw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/9110220415588191109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/11/using-mastertype-directive-instead-of.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/9110220415588191109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/9110220415588191109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/PMSjlIbBmYw/using-mastertype-directive-instead-of.html" title="Using the @MasterType directive instead of the @Page directive with MasterPageFile=&quot;&quot;" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/11/using-mastertype-directive-instead-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4CQnw8eSp7ImA9WxNUEko.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-7997585240482288165</id><published>2009-11-03T18:55:00.000Z</published><updated>2009-11-03T19:36:03.271Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T19:36:03.271Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="standards" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="browser" /><title>Browser discrepancies, arghh!</title><content type="html">Why oh why do browsers from different vendors (Internet &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Exlorer&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Firefox&lt;/span&gt;, Chrome etc) STILL have problems agreeing on the correct way to display a web page and correctly interpret javascript?&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.w3.org/"&gt;World Wide Web Consortium&lt;/a&gt; has been around for &lt;a href="http://en.wikipedia.org/wiki/W3c"&gt;15 years now&lt;/a&gt; and defines the standards required for web developers to follow (which I must say I attempt to do very carefully) only to find that most browsers out there don't (or even worse have their &lt;span style="font-style: italic;"&gt;own&lt;/span&gt; interpretation of them).&lt;br /&gt;&lt;br /&gt;The problem here is the W3C leaves it up to the software manufacturers in order to become 'compliant', which doesn't mean much, as there are different standards of compliance, huh?&lt;br /&gt;&lt;br /&gt;Microsoft's latest version of Internet Explorer claims it is "standards &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;compliant&lt;/span&gt;" and has been riled all over the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;internet&lt;/span&gt; forums for breaking existing websites. Which I think is a very positive move as now these websites must also begin to follow standards or start losing traffic.&lt;br /&gt;&lt;br /&gt;I think the only way this can be tackled would a scheme which checks new web browser software prior to market for &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;compliance&lt;/span&gt;, and only if it passes 100% of tests can it legally be called a browser.  Such a scheme could work in the same way that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;SSL&lt;/span&gt; certificates are issued, and would work something like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Software is submitted to an &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;independent&lt;/span&gt; authority which &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;performs&lt;/span&gt; tests on the browser for &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;compliance&lt;/span&gt; with current standards&lt;/li&gt;&lt;li&gt;Following a successful result a certificate is issued based on a signature of the software, and is unique to that software&lt;/li&gt;&lt;li&gt;In order resolve domain names this certificate must be included in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;DNS&lt;/span&gt; requests, failure of which would mean the request is ignored&lt;/li&gt;&lt;/ul&gt;Assuming this is possible would mean that non-&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;compliant&lt;/span&gt; browsers would be less &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;convenient&lt;/span&gt; to use for end users (who wants to type in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;IPs&lt;/span&gt; each time they want to visit a page?) and would result in loss of custom, forcing them elsewhere.&lt;br /&gt;&lt;br /&gt;On a side note the latest version of outlook express actually uses the Word (yes &lt;span style="font-style: italic;"&gt;Word&lt;/span&gt;) to render embedded HTML, surely this is a joke Microsoft?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-7997585240482288165?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sY082Ml7p8Qa9ogXS9DSZ5VccVo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sY082Ml7p8Qa9ogXS9DSZ5VccVo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sY082Ml7p8Qa9ogXS9DSZ5VccVo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sY082Ml7p8Qa9ogXS9DSZ5VccVo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/DoIwW6KJuFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/7997585240482288165/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/11/browser-discrepancies-arghh.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/7997585240482288165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/7997585240482288165?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/DoIwW6KJuFI/browser-discrepancies-arghh.html" title="Browser discrepancies, arghh!" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/11/browser-discrepancies-arghh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MEQ3Y4eyp7ImA9WxNUEUU.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-5898284916857506209</id><published>2009-11-02T16:46:00.000Z</published><updated>2009-11-02T17:03:22.833Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-02T17:03:22.833Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bank card reader chip and pin" /><title>Why I hate the bank card readers</title><content type="html">All the major banks are now supplying the darned card readers to be used for online transactions.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you don't know what I mean they're the little "calculator like" devices which you insert your debit card (and pin) to allow yourself to be authenticated via online banking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However (like all security) there are downsides:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;You have to carry one &lt;i&gt;everywhere&lt;/i&gt; you do your online banking&lt;/li&gt;&lt;li&gt;For some reason most institutions &lt;i&gt;lock&lt;/i&gt; them to only work with their cards (so you cannot simply borrow one from someone)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Most people mis-understand how these devices work, the clue is in the name, they are a &lt;i&gt;reader&lt;/i&gt;, they don't have any logic on-board regarding anything financial.  The processing all happens within the chip itself on the card, the readers are simply a means of communicating with your card.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regarding having to use one for each institution would be very understandable if each used their own algorithms for card transactions, but this would be both a massive overhead and simply isn't the way its done (do they have different card readers for each bank in the shops?).  Instead a marker is set on the card detailing the banks 5 digit number.  The readers must simply compare this to a pre-set value and if not identical "Wrong Card", god dam!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Forcing most people to have to carry this stupid things around with them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regarding security they can actually make it worse.  Picture this.  Dark alley late at night. Thieves mug you, get your card, and demand your pin.  It can be checked on the spot, without the thieves having to risk marching you to the nearest cash machine.  This is &lt;i&gt;stupid &lt;/i&gt;that these things actually issue "wrong pin, try again".  A better way would to be simply issue the authentication codes anyway, which would of course be wrong had the pin being incorrect.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nevermind, maybe the banks will catch up with technology one day...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Shame on you banks for locking down on internet banking when the whole ethos is around making it more convenient for their customers.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-5898284916857506209?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vXzciT7TaSk270CGqidm2-AaGmc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vXzciT7TaSk270CGqidm2-AaGmc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vXzciT7TaSk270CGqidm2-AaGmc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vXzciT7TaSk270CGqidm2-AaGmc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/i1J-YmrK9Mo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/5898284916857506209/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/11/why-i-hate-bank-card-readers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/5898284916857506209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/5898284916857506209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/i1J-YmrK9Mo/why-i-hate-bank-card-readers.html" title="Why I hate the bank card readers" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/11/why-i-hate-bank-card-readers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYBQ3w6cCp7ImA9WxNVGE8.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-726764029693374777</id><published>2009-10-29T14:11:00.000Z</published><updated>2009-10-29T14:22:32.218Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-29T14:22:32.218Z</app:edited><title>.NET Framework gets more powerful by the day</title><content type="html">Almost daily now I discover another aspect of the .NET framework which replaces manual repetitive tasks us developers are used to.&lt;br /&gt;&lt;br /&gt;On going about setting up a membership system for a recent project I was about to go ahead and create session variables so the user can be tracked across pages, a pretty usual task in web development, when a colleague passed me a training folder entitled "Developing ASP.NET Web Applications: Hands-On".&lt;br /&gt;&lt;br /&gt;Well blow me, everything you need (I mean EVERYTHING) is already pre-written and accessible through the System.Web.Security namespace using the Membership Provider, and anything that you need to customise is simply a case of deriving a class full of your own code.&lt;br /&gt;&lt;br /&gt;In about 5 mins flat I put all the "members only" pages into a respective folder and changed the config file, now it'll only be shown when I &lt;u&gt;drag&lt;/u&gt; the asp:Login control and authenticate myself. So much easier, and .NET is definitely becoming my first choice for personal and future projects&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-726764029693374777?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Cen-G41yadNzpJZObR3465-mIlQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Cen-G41yadNzpJZObR3465-mIlQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Cen-G41yadNzpJZObR3465-mIlQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Cen-G41yadNzpJZObR3465-mIlQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/feNhA9Xuahg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/726764029693374777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/10/net-framework-gets-more-powerful-by-day.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/726764029693374777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/726764029693374777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/feNhA9Xuahg/net-framework-gets-more-powerful-by-day.html" title=".NET Framework gets more powerful by the day" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/10/net-framework-gets-more-powerful-by-day.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAQX0-fip7ImA9WxNbFkk.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-1072208972097617289</id><published>2009-06-08T15:28:00.000+01:00</published><updated>2009-11-19T14:47:20.356Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-19T14:47:20.356Z</app:edited><title>WHHAAT? HttpUtility.Urlencode() doesn't encode apostrophes?</title><content type="html">For some obscure reason &lt;a href="http://msdn.microsoft.com/en-us/library/4fkewx0t.aspx"&gt;HttpUtility.Urlencode()&lt;/a&gt; supplied with the .NET framework doesn't encode the apostrophe!  The only way around this appears to be encode it, then manually replace this "special character" with %27.&lt;br /&gt;
&lt;br /&gt;
This is rather worrying actually.  I've used this method plenty of times, in past projects, only to have found out they can be broken with a simple '.  This is a major oversight on MS's behalf (yes have you noticed the amount of apostrophe's that appear in this post?).&lt;br /&gt;
&lt;br /&gt;
Anyways, looks like a quick Ctrl+F to find all instances of this I can and to replace with:&lt;br /&gt;
&lt;br /&gt;
HttpUtility.UrlEncode(URL.Replace("'", "%27");&lt;br /&gt;
&lt;br /&gt;
Funny how this isn't documented anywhere in the official docs isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-1072208972097617289?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mJtWPzFIiVZOfs3t58VRkZUDwaU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mJtWPzFIiVZOfs3t58VRkZUDwaU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mJtWPzFIiVZOfs3t58VRkZUDwaU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mJtWPzFIiVZOfs3t58VRkZUDwaU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/HD4TecI-ncY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/1072208972097617289/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/06/whhaat-httputilityurlencode-doesnt.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1072208972097617289?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1072208972097617289?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/HD4TecI-ncY/whhaat-httputilityurlencode-doesnt.html" title="WHHAAT? HttpUtility.Urlencode() doesn't encode apostrophes?" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/06/whhaat-httputilityurlencode-doesnt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8CRn0zfip7ImA9WxJQFUQ.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-2173515086017154260</id><published>2009-05-29T11:39:00.000+01:00</published><updated>2009-05-29T11:44:27.386+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-29T11:44:27.386+01:00</app:edited><title>I was caught Google's StreetView!</title><content type="html">On the way to work this morning whilst sending a text message I realised the easily &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;distinguishable&lt;/span&gt; &lt;a href="http://maps.google.co.uk/help/maps/streetview/"&gt;Google StreetView&lt;/a&gt; cam flying past on the top of a foreign registered corsa, and I've a good bet it was filming at the time. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No images are online yet...but I'll be checking on a daily basis.  I wonder how long it takes them to process and upload the images?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-2173515086017154260?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YEAmpN8Kfdjc4wMMc0-cNltWwi0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YEAmpN8Kfdjc4wMMc0-cNltWwi0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YEAmpN8Kfdjc4wMMc0-cNltWwi0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YEAmpN8Kfdjc4wMMc0-cNltWwi0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/8J3iXliBD7Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/2173515086017154260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/05/i-was-caught-googles-streetview.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/2173515086017154260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/2173515086017154260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/8J3iXliBD7Q/i-was-caught-googles-streetview.html" title="I was caught Google's StreetView!" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/05/i-was-caught-googles-streetview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMQX48fyp7ImA9WxJRF0k.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-3541280870527888627</id><published>2009-05-19T14:53:00.000+01:00</published><updated>2009-05-19T15:09:40.077+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T15:09:40.077+01:00</app:edited><title>Creating a windows service using the .net framework</title><content type="html">Today has been spent attempting to write a windows service in the .NET framework (Using C#).  While reasonably hard to get of the ground, after a bit of research they are actually only slighty harder to write than a simple WinForm.  I do however want to repeat some bits of my research here, hopefully to make coding a windows service easier in the future:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;They cannot be simply ran by hitting F5 and hoping for the best.  They must be tediously installed (or if like me you can write an &lt;a href="http://msdn.microsoft.com/en-us/library/76712d27(VS.80).aspx"&gt;External Tool&lt;/a&gt; to Visual Studio :-)&lt;/li&gt;&lt;li&gt;You need to start the service manually (or again you could write a small batch file [using net start])&lt;/li&gt;&lt;li&gt;The service will not be started from a network drive (You will get an error along the lines of: Error 403 File cannot be found) generic huh?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And last but not least....you can't use the Timer control contained in System.Windows.Forms, nope, it has to be a cousin (albeit almost identical) control within the System.Timers namespace.  Use of the latter won't cause any compilation problems, it simply won't work, as I eventually found out from this obscure &lt;a href="http://support.microsoft.com/kb/820639"&gt;Microsoft article&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As you can see, writing a Windows Service is no trivial task...&lt;/p&gt;&lt;p&gt;Happy coding!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-3541280870527888627?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GfelqwaIl2uUi7lTj4i1WAzldqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GfelqwaIl2uUi7lTj4i1WAzldqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GfelqwaIl2uUi7lTj4i1WAzldqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GfelqwaIl2uUi7lTj4i1WAzldqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/Ojj-TlZavas" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/3541280870527888627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/05/creating-windows-service-using-net.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/3541280870527888627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/3541280870527888627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/Ojj-TlZavas/creating-windows-service-using-net.html" title="Creating a windows service using the .net framework" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/05/creating-windows-service-using-net.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4CRnw8eCp7ImA9WxJRE0U.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-1886857324509836164</id><published>2009-05-15T11:39:00.000+01:00</published><updated>2009-05-15T11:39:27.270+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-15T11:39:27.270+01:00</app:edited><title>How to create a ComboBox in ASP.NET</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;The .NET framework has long been deficient in the fact it DOES NOT include a ComboBox control as standard. &amp;nbsp;For those of you who do not know what a ComboBox is, it is essentially an editable drop down list (see &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx"&gt;here&lt;/a&gt;) which allows the user to either type OR select from a list. &amp;nbsp;I suppose it is rather&amp;nbsp;analogous&amp;nbsp;to the browsers address bar.&lt;/span&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;There are other options out there to provide this functionality (such as the&amp;nbsp;&lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx"&gt;AJAX solution above&lt;/a&gt;) and countless paid for controls, but what if all you want is a simple, no frills ComboBox?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;Well it is actually rather simple to create one.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;What is required is to add a TextBox and a Button (or if you're feeling fancy an image) and a ListBox below them, so that you have something like:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; white-space: normal;"&gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:TextBox ID="TextBox1" runat="server"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style="z-index: 1; left: 102px; top: 28px; position: absolute"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Height="20px"&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;input id="Button1" type="button" value="V" style="width:20px; height:28px; z-index: 1; left: 239px; top: 27px; position: absolute" onclick="toggle_visibility('div1')" /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id="div1" style="display:none"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:ListBox ID="ListBox1" runat="server"&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;style="z-index: 1; left: 102px; top: 59px; position: absolute"&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;Width="155px" AutoPostBack="True"&amp;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;&amp;nbsp;&amp;lt;asp:ListItem Selected="True"&amp;gt;Sids Co&amp;lt;/asp:ListItem&amp;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;&amp;nbsp;&amp;lt;asp:ListItem&amp;gt;Jacks Co&amp;lt;/asp:ListItem&amp;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;&amp;nbsp;&amp;lt;asp:ListItem&amp;gt;Daves Co&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/asp:ListBox&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 13px; white-space: pre-wrap;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 13px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; white-space: normal;"&gt;Then all is required is a spot of JavaScript to show/hide the ListBox when you click the button:&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;function toggle_visibility(id) {&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; var e = document.getElementById(id);&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(e.style.display == 'block')&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;e.style.display = 'none';&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;e.style.display = 'block';&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Of course you may find that you'll have to play around with CSS to get it looking correctly and a bit of codebehind so that when the user selects from the ListBox the TextBox is updated correctly. &amp;nbsp;However what you have is essentially a working ComboBox that works in all browsers, and to be honest, what else do you need?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Those looking for a more elegant solution are either going to have to cough up and pay for the control, or move towards the &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx"&gt;AJAX solution&lt;/a&gt; (which will NOT work with JavaScript disabled). &amp;nbsp;Blame Microsoft :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;EDIT: &amp;nbsp;I have found a nice &lt;a href="http://dotnetslackers.com/articles/aspnet/Custom_ASPNET_ComboxBox_Control.aspx"&gt;free version of a ComboBox control&lt;/a&gt;&amp;nbsp;. &amp;nbsp;However I would use with caution as it doesn't seem to work in FireFox :-S&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-1886857324509836164?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Bv0GzyGrKBsspN7TAl7ci4Hnzto/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bv0GzyGrKBsspN7TAl7ci4Hnzto/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Bv0GzyGrKBsspN7TAl7ci4Hnzto/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bv0GzyGrKBsspN7TAl7ci4Hnzto/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/aMucOvEQ3WU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/1886857324509836164/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/05/how-to-create-combobox-in-aspnet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1886857324509836164?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/1886857324509836164?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/aMucOvEQ3WU/how-to-create-combobox-in-aspnet.html" title="How to create a ComboBox in ASP.NET" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/05/how-to-create-combobox-in-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMSX06eip7ImA9WxJRE0o.&quot;"><id>tag:blogger.com,1999:blog-5869170458511702205.post-9221516811050019684</id><published>2009-05-15T09:44:00.000+01:00</published><updated>2009-05-15T10:06:28.312+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-15T10:06:28.312+01:00</app:edited><title>Getting the Ajax Control Toolkit to work with Visual Studio 2005</title><content type="html">Like many out there I have recently been problems attempting to get the Ajax Control Toolkit to work (correctly) in Visual Studio 2005.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After LOTS  of research it appears that most of the problems are caused by a mismatch of the referenced versions versions of the System.Web.Extensions namespace.  Just to clarify the errors that pop-up DO NOT usually mention this is the culprit.  For example the error the parser kept throwing at me was:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;The base class includes the field 'ScriptManager1', but its type  (System.Web.UI.ScriptManager) is not compatible with the type of control  (System.Web.UI.ScriptManager). &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Now as you need a Script Manager on the page in order to use any of the controls in the toolkit this was really starting to get annoying.  I couldn't see anything wrong with the System.Web namespace, but as usual, I was looking in the wrong place.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To solve this problem involves the web.config file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You need to check through this ensuring the versions for the System.Web.UI is using version 3.5.0.0 and NOT 1.0.61025.0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example the line I had was:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 13px; white-space: pre-wrap; "&gt;&lt;code&gt; &amp;lt;system.web&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;pages&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;controls&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/controls&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/pages&amp;gt;&lt;br /&gt; &amp;lt;/system.web&amp;gt; &lt;/code&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 13px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which should have been:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 13px; white-space: pre-wrap; "&gt;&lt;code&gt; &amp;lt;system.web&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;pages&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;controls&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/controls&amp;gt;&lt;br /&gt; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/pages&amp;gt;&lt;br /&gt; &amp;lt;/system.web&amp;gt; &lt;/code&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 13px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which completely solved my problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;p.s. To find the solution of this problem I edited every instance of the version in the web config, although probably not required, doesn't seem to cause any problems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869170458511702205-9221516811050019684?l=www.matthewedmondson.info' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ui7NTo6UWFgtUfp4FAUMUkEnDQ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ui7NTo6UWFgtUfp4FAUMUkEnDQ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ui7NTo6UWFgtUfp4FAUMUkEnDQ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ui7NTo6UWFgtUfp4FAUMUkEnDQ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/matthewedmondson/Erzm/~4/uza-f7bB35w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.matthewedmondson.info/feeds/9221516811050019684/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.matthewedmondson.info/2009/05/getting-ajax-control-toolkit-to-work.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/9221516811050019684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5869170458511702205/posts/default/9221516811050019684?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/matthewedmondson/Erzm/~3/uza-f7bB35w/getting-ajax-control-toolkit-to-work.html" title="Getting the Ajax Control Toolkit to work with Visual Studio 2005" /><author><name>eddy556</name><uri>http://www.blogger.com/profile/01617617680494514764</uri><email>eddy556+nospam@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="02525343028626454742" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.matthewedmondson.info/2009/05/getting-ajax-control-toolkit-to-work.html</feedburner:origLink></entry></feed>
