by Christoph Herold
19. November 2008 17:37
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:
<SharePointWebControls:DateTimeField runat="server" id="dtfArticleStartDate"
DateOnly="true" FieldName="ArticleStartDate" />
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:
[ArgumentException: FieldName value is not specified.]
Microsoft.SharePoint.WebControls.FieldMetadata.get_Field() +150
Microsoft.SharePoint.WebControls.DateTimeField.CreateChildControls() +310
System.Web.UI.Control.EnsureChildControls() +87
Microsoft.SharePoint.WebControls.DateTimeField.set_DateOnly(Boolean value) +29
ASP.MYNEWSPAGE_ASPX__2072755151.__BuildControldtfArticleStartDate()
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.
- ASP.MYNEWSPAGE_ASPX__2072755151.__BuildControldtfArticleStartDate():
- We are building my DateTimeField control.
- DateTimeField.set_DateOnly:
- We are setting the DateOnly property.
- FieldMetadata.get_Field:
- Getting the field is where the exception occurs.
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:
<SharePointWebControls:DateTimeField runat="server" id="dtfArticleStartDate"
FieldName="ArticleStartDate" DateOnly="true" />
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 :-)