<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Coeamyd's - Pitfall</title>
    <link>http://www.coeamyd.net/</link>
    <description>...It ain't easy being green</description>
    <language>en-us</language>
    <copyright>Christoph Herold</copyright>
    <lastBuildDate>Wed, 18 Mar 2009 16:43:48 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>Christoph.Herold@coeamyd.net</managingEditor>
    <webMaster>Christoph.Herold@coeamyd.net</webMaster>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=a2da5e82-d6aa-42f0-8913-8538cd7502f0</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,a2da5e82-d6aa-42f0-8913-8538cd7502f0.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,a2da5e82-d6aa-42f0-8913-8538cd7502f0.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a2da5e82-d6aa-42f0-8913-8538cd7502f0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just wasted another hour, trying to figure out, what exactly ASP.NET was trying
to tell me, when giving me an <strong>"ASPNET: Make sure that the class defined in
this code file matches the 'inherits' attribute, and that it extends the correct base
class (e.g. Page or UserControl)."</strong> message on compiling my ascx file.
</p>
        <p>
Ok, so I used a custom namespace, but I've done that hundreds of times, so that shouldn't
be the problem. I also had a custom base class inheriting from UserControl. Also,
nothing I haven't done before. So what was the issue now?!
</p>
        <p>
I basically retyped everything concerning the namespace and class names in all files,
but nothing helped. So I reverted to commenting out my code. This helped me find the
issue: I used a
</p>
        <pre>&lt;% if (somethingOrOther) { %&gt; Some code here &lt;% } %&gt;</pre>
        <p>
construct in my ascx-file (Please don't start an argument on whether this is good
practice or not. I know it's not the cleanest way to do things, but that is not the
concern here :-) ), and actually forgot to put in the closing <code>&lt;% } %&gt;</code>.
Ok, my fault, but shouldn't you get a better Compiler message than "ASPNET: Make sure
that the class defined in this code file matches the 'inherits' attribute, and that
it extends the correct base class (e.g. Page or UserControl)."?!
</p>
        <p>
So, if you encouter this error (and believe me, I've had it more than once due to
typos), and are 100% positive you've spelled everything correctly, check for unbalanced
parentheses!
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=a2da5e82-d6aa-42f0-8913-8538cd7502f0" />
      </body>
      <title>Bogus errors from ASP.NET compiler</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,a2da5e82-d6aa-42f0-8913-8538cd7502f0.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,a2da5e82-d6aa-42f0-8913-8538cd7502f0.aspx</link>
      <pubDate>Wed, 18 Mar 2009 16:43:48 GMT</pubDate>
      <description>&lt;p&gt;
I just wasted another hour, trying to figure out, what exactly ASP.NET was trying
to tell me, when giving me an &lt;strong&gt;"ASPNET: Make sure that the class defined in
this code file matches the 'inherits' attribute, and that it extends the correct base
class (e.g. Page or UserControl)."&lt;/strong&gt; message on compiling my ascx file.
&lt;/p&gt;
&lt;p&gt;
Ok, so I used a custom namespace, but I've done that hundreds of times, so that shouldn't
be the problem. I also had a custom base class inheriting from UserControl. Also,
nothing I haven't done before. So what was the issue now?!
&lt;/p&gt;
&lt;p&gt;
I basically retyped everything concerning the namespace and class names in all files,
but nothing helped. So I reverted to commenting out my code. This helped me find the
issue: I used a
&lt;/p&gt;
&lt;pre&gt;&amp;lt;% if (somethingOrOther) { %&amp;gt; Some code here &amp;lt;% } %&amp;gt;&lt;/pre&gt;
&lt;p&gt;
construct in my ascx-file (Please don't start an argument on whether this is good
practice or not. I know it's not the cleanest way to do things, but that is not the
concern here :-) ), and actually forgot to put in the closing &lt;code&gt;&amp;lt;% } %&amp;gt;&lt;/code&gt;.
Ok, my fault, but shouldn't you get a better Compiler message than "ASPNET: Make sure
that the class defined in this code file matches the 'inherits' attribute, and that
it extends the correct base class (e.g. Page or UserControl)."?!
&lt;/p&gt;
&lt;p&gt;
So, if you encouter this error (and believe me, I've had it more than once due to
typos), and are 100% positive you've spelled everything correctly, check for unbalanced
parentheses!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=a2da5e82-d6aa-42f0-8913-8538cd7502f0" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,a2da5e82-d6aa-42f0-8913-8538cd7502f0.aspx</comments>
      <category>.NET;ASP.NET;Development;HTML;Pitfall;Web</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=f596bb07-01ec-439a-860a-84830935243c</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,f596bb07-01ec-439a-860a-84830935243c.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,f596bb07-01ec-439a-860a-84830935243c.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f596bb07-01ec-439a-860a-84830935243c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yesterday, I had one of those WTF moments. I had a page with a form for entering two
addresses. Both had the same fields, including a <code>RadioButtonList</code> with
identical items. Since the items are resourced, I decided to optimize the performance
by reusing the <code>ListItem</code>s like so:
</p>
        <pre>ListItem[] items = new ListItem[2];
items[0] = new ListItem(this.GetString("salutation.Mister"), "Mr");
items[1] = new ListItem(this.GetString("salutation.Misses"), "Mrs");
this.salutation.Items.AddRange(items);
this.salutation2.Items.AddRange(items);</pre>
        <p>
Simple eh. Everything seems to be ok. And was I amazed, when I tested it, and I always
got the <code>SelectedItem</code> to be the one selected in <code>salutation2</code>.
I double-checked every location were I was storing the values, in case I forgot to
change the field name after copy/pasting. But everything was correct, as far as I
could tell. I even checked the values submitted by the browser, they were also correct.
</p>
        <p>
Finally, it hit me: The ListItem has a <code>Selected</code> property, and it is used
to find the <code>RadioButtonList</code>s <code>SelectedItem</code> property. And
since I reused the items, the first list parses its items on postback, sets the appropriate <code>ListItem</code>'s <code>Selected</code> property
to <code>true</code>. Same thing happens with the second <code>RadioButtonList</code>.
And since the <code>ListItem</code>s are used in both lists, the last one wins.
</p>
        <p>
So, I changed my code to look like this:
</p>
        <pre>ListItem[] items = new ListItem[2];
items[0] = new ListItem(this.GetString("salutation.Mister"), "Mr");
items[1] = new ListItem(this.GetString("salutation.Misses"), "Mrs");
this.salutation.Items.AddRange(items);
items = new ListItem[2];
items[0] = new ListItem(this.GetString("salutation.Mister"), "Mr");
items[1] = new ListItem(this.GetString("salutation.Misses"), "Mrs");
this.salutation2.Items.AddRange(items);</pre>
        <p>
Now everything works as it should. So next time, be careful when reusing your <code>ListItem</code>s!
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=f596bb07-01ec-439a-860a-84830935243c" />
      </body>
      <title>Be careful when reusing ListItems</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,f596bb07-01ec-439a-860a-84830935243c.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,f596bb07-01ec-439a-860a-84830935243c.aspx</link>
      <pubDate>Tue, 17 Mar 2009 11:12:24 GMT</pubDate>
      <description>&lt;p&gt;
Yesterday, I had one of those WTF moments. I had a page with a form for entering two
addresses. Both had the same fields, including a &lt;code&gt;RadioButtonList&lt;/code&gt; with
identical items. Since the items are resourced, I decided to optimize the performance
by reusing the &lt;code&gt;ListItem&lt;/code&gt;s like so:
&lt;/p&gt;
&lt;pre&gt;ListItem[] items = new ListItem[2];
items[0] = new ListItem(this.GetString("salutation.Mister"), "Mr");
items[1] = new ListItem(this.GetString("salutation.Misses"), "Mrs");
this.salutation.Items.AddRange(items);
this.salutation2.Items.AddRange(items);&lt;/pre&gt;
&lt;p&gt;
Simple eh. Everything seems to be ok. And was I amazed, when I tested it, and I always
got the &lt;code&gt;SelectedItem&lt;/code&gt; to be the one selected in &lt;code&gt;salutation2&lt;/code&gt;.
I double-checked every location were I was storing the values, in case I forgot to
change the field name after copy/pasting. But everything was correct, as far as I
could tell. I even checked the values submitted by the browser, they were also correct.
&lt;/p&gt;
&lt;p&gt;
Finally, it hit me: The ListItem has a &lt;code&gt;Selected&lt;/code&gt; property, and it is used
to find the &lt;code&gt;RadioButtonList&lt;/code&gt;s &lt;code&gt;SelectedItem&lt;/code&gt; property. And
since I reused the items, the first list parses its items on postback, sets the appropriate &lt;code&gt;ListItem&lt;/code&gt;'s &lt;code&gt;Selected&lt;/code&gt; property
to &lt;code&gt;true&lt;/code&gt;. Same thing happens with the second &lt;code&gt;RadioButtonList&lt;/code&gt;.
And since the &lt;code&gt;ListItem&lt;/code&gt;s are used in both lists, the last one wins.
&lt;/p&gt;
&lt;p&gt;
So, I changed my code to look like this:
&lt;/p&gt;
&lt;pre&gt;ListItem[] items = new ListItem[2];
items[0] = new ListItem(this.GetString("salutation.Mister"), "Mr");
items[1] = new ListItem(this.GetString("salutation.Misses"), "Mrs");
this.salutation.Items.AddRange(items);
items = new ListItem[2];
items[0] = new ListItem(this.GetString("salutation.Mister"), "Mr");
items[1] = new ListItem(this.GetString("salutation.Misses"), "Mrs");
this.salutation2.Items.AddRange(items);&lt;/pre&gt;
&lt;p&gt;
Now everything works as it should. So next time, be careful when reusing your &lt;code&gt;ListItem&lt;/code&gt;s!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=f596bb07-01ec-439a-860a-84830935243c" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,f596bb07-01ec-439a-860a-84830935243c.aspx</comments>
      <category>ASP.NET;Development;HTML;Web;Pitfall</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=561b2b93-bfa5-4ad7-9805-d939b2b9301e</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,561b2b93-bfa5-4ad7-9805-d939b2b9301e.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,561b2b93-bfa5-4ad7-9805-d939b2b9301e.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=561b2b93-bfa5-4ad7-9805-d939b2b9301e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, I was building a nice little page layout for SharePoint and wanted to use SharePoint
DateTimeField control. Since the field I wanted to edit was DateOnly, I set the corresponding
property, leaving me with this code:
</p>
        <p>
          <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;SharePointWebControls:DateTimeField
runat=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"server"</span> id=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"dtfArticleStartDate"</span> DateOnly=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"true"</span> FieldName=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"ArticleStartDate"</span> /&gt;</span>
        </p>
        <p>
Seems fine to me, but ASP.NET did not like it. Or rather, the control did not like
it. I got an ArgumentException with the following StackTrace:
</p>
        <p>
 
</p>
        <p>
          <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">[ArgumentException:
FieldName value is not specified.]<br />
Microsoft.SharePoint.WebControls.FieldMetadata.get_Field() +150<br />
Microsoft.SharePoint.WebControls.DateTimeField.CreateChildControls() +310<br />
System.Web.UI.Control.EnsureChildControls() +87<br />
Microsoft.SharePoint.WebControls.DateTimeField.set_DateOnly(Boolean value) +29<br />
ASP.MYNEWSPAGE_ASPX__2072755151.__BuildControldtfArticleStartDate()</span>
        </p>
        <p>
FieldName value is not specified?! As you can see in my code above, it is indeed specified.
But the stack trace gives us more information: The exception occurs in the compiled
ASPX file.
</p>
        <ul>
          <li>
ASP.MYNEWSPAGE_ASPX__2072755151.__BuildControldtfArticleStartDate():<br />
- We are building my DateTimeField control.</li>
          <li>
DateTimeField.set_DateOnly:<br />
- We are setting the DateOnly property.</li>
          <li>
FieldMetadata.get_Field:<br />
- Getting the field is where the exception occurs.</li>
        </ul>
        <p>
Note my ASPX-code again: I first set DateOnly="true" and then FieldName="ArticleStartDate".
Oh my god, this can't be true... The solution is very simple: change the order of
the attributes/properties:
</p>
        <p>
          <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;SharePointWebControls:DateTimeField
runat=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"server"</span> id=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"dtfArticleStartDate"</span><span style="color: #cc0000; background-color: #ffcccc; font-family: Courier New; font-size: 11px;">FieldName="ArticleStartDate"
DateOnly="true"</span> /&gt;</span>
        </p>
        <p>
Against all good practices, the SharePoint team actually created a direct dependency
between two properties. At least the stack trace directly tells you where things go
wrong, so the solution is obvious. Nonetheless, I thought, this was worth noting.
It actually made me laugh, when I encountered it. Another one of those nice little
pitfalls when working with SharePoint :-)
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=561b2b93-bfa5-4ad7-9805-d939b2b9301e" />
      </body>
      <title>SharePoint DateTimeField control and the order of its properties</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,561b2b93-bfa5-4ad7-9805-d939b2b9301e.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,561b2b93-bfa5-4ad7-9805-d939b2b9301e.aspx</link>
      <pubDate>Wed, 19 Nov 2008 16:37:25 GMT</pubDate>
      <description>&lt;p&gt;
Today, I was building a nice little page layout for SharePoint and wanted to use SharePoint
DateTimeField control. Since the field I wanted to edit was DateOnly, I set the corresponding
property, leaving me with this code:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;lt;SharePointWebControls:DateTimeField
runat=&lt;span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"&gt;"server"&lt;/span&gt; id=&lt;span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"&gt;"dtfArticleStartDate"&lt;/span&gt; DateOnly=&lt;span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"&gt;"true"&lt;/span&gt; FieldName=&lt;span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"&gt;"ArticleStartDate"&lt;/span&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Seems fine to me, but ASP.NET did not like it. Or rather, the control did not like
it. I got an ArgumentException with the following StackTrace:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;[ArgumentException:
FieldName value is not specified.]&lt;br /&gt;
Microsoft.SharePoint.WebControls.FieldMetadata.get_Field() +150&lt;br /&gt;
Microsoft.SharePoint.WebControls.DateTimeField.CreateChildControls() +310&lt;br /&gt;
System.Web.UI.Control.EnsureChildControls() +87&lt;br /&gt;
Microsoft.SharePoint.WebControls.DateTimeField.set_DateOnly(Boolean value) +29&lt;br /&gt;
ASP.MYNEWSPAGE_ASPX__2072755151.__BuildControldtfArticleStartDate()&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
FieldName value is not specified?! As you can see in my code above, it is indeed specified.
But the stack trace gives us more information: The exception occurs in the compiled
ASPX file.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
ASP.MYNEWSPAGE_ASPX__2072755151.__BuildControldtfArticleStartDate():&lt;br /&gt;
- We are building my DateTimeField control.&lt;/li&gt;
&lt;li&gt;
DateTimeField.set_DateOnly:&lt;br /&gt;
- We are setting the DateOnly property.&lt;/li&gt;
&lt;li&gt;
FieldMetadata.get_Field:&lt;br /&gt;
- Getting the field is where the exception occurs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Note my ASPX-code again: I first set DateOnly="true" and then FieldName="ArticleStartDate".
Oh my god, this can't be true... The solution is very simple: change the order of
the attributes/properties:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;lt;SharePointWebControls:DateTimeField
runat=&lt;span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"&gt;"server"&lt;/span&gt; id=&lt;span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"&gt;"dtfArticleStartDate"&lt;/span&gt; &lt;span style="color: #cc0000; background-color: #ffcccc; font-family: Courier New; font-size: 11px;"&gt;FieldName="ArticleStartDate"
DateOnly="true"&lt;/span&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Against all good practices, the SharePoint team actually created a direct dependency
between two properties. At least the stack trace directly tells you where things go
wrong, so the solution is obvious. Nonetheless, I thought, this was worth noting.
It actually made me laugh, when I encountered it. Another one of those nice little
pitfalls when working with SharePoint :-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=561b2b93-bfa5-4ad7-9805-d939b2b9301e" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,561b2b93-bfa5-4ad7-9805-d939b2b9301e.aspx</comments>
      <category>.NET;ASP.NET;Development;Pitfall;SharePoint</category>
    </item>
  </channel>
</rss>