Umbraco 4.7, usercontrol macros, hyphens and validator client scripts
Just found a really weird error, I can't work out if it's Umbraco specific or a .NET bug.
I developed a usercontrol for a registration form, which had a number of standard ASP.NET validators on it.
However, I was getting script errors, and this is why:
When ASP.NET generates client side script for validators, it seems to create a load of dynamic Javascript, including setting up some variables that are named the full ClientID of the validator control.
Now, something - I think Umbraco? - is setting the ID of the embedded usercontrol to be the filename of the .ASCX file.
This is fine, except when your user control has hyphens in - e.g. registration-form.ascx
What happens then is that everything seems to work - it's a perfectly valid ID for an HTML element, and all the serverside stuff seems to work fine too, but it means the automatic validator scripts will contain things like:
var page001_ctl001_ph001_registration-form_1_ctl004 = document.all[...];
...which is not valid Javascript due to the hyphen in the variable name.
As I said, pretty obscure, and you might not even notice it as the server side validation all still works!
Personally my solution would be to rename the file to be more appropriate. Granted, I feel pretty strongly about file system object naming (specially within a programming environment, but it's for this very reason: a user can name their day-to-day files as they want, but as programmers we have to think that all this kind of stuff can happen, and knowing that a hyphen in a variable name isn't going to work in most contexts (and possibly complicate things in many more ways) should kind of be a deterrant to doing so.
This doesn't even mention standards, which, if we were to consider, would dictate this a weird naming convention for files that would have a corresponding type. Since you could not name the type with a hyphen, why name its file in such a way? It's still an identifier of sorts. In my opinion this is not a bug in either Umbraco or .NET, but instead is a human error.
Umbraco 4.7, usercontrol macros, hyphens and validator client scripts
Just found a really weird error, I can't work out if it's Umbraco specific or a .NET bug.
I developed a usercontrol for a registration form, which had a number of standard ASP.NET validators on it.
However, I was getting script errors, and this is why:
When ASP.NET generates client side script for validators, it seems to create a load of dynamic Javascript, including setting up some variables that are named the full ClientID of the validator control.
Now, something - I think Umbraco? - is setting the ID of the embedded usercontrol to be the filename of the .ASCX file.
This is fine, except when your user control has hyphens in - e.g. registration-form.ascx
What happens then is that everything seems to work - it's a perfectly valid ID for an HTML element, and all the serverside stuff seems to work fine too, but it means the automatic validator scripts will contain things like:
...which is not valid Javascript due to the hyphen in the variable name.
As I said, pretty obscure, and you might not even notice it as the server side validation all still works!
Personally my solution would be to rename the file to be more appropriate. Granted, I feel pretty strongly about file system object naming (specially within a programming environment, but it's for this very reason: a user can name their day-to-day files as they want, but as programmers we have to think that all this kind of stuff can happen, and knowing that a hyphen in a variable name isn't going to work in most contexts (and possibly complicate things in many more ways) should kind of be a deterrant to doing so.
This doesn't even mention standards, which, if we were to consider, would dictate this a weird naming convention for files that would have a corresponding type. Since you could not name the type with a hyphen, why name its file in such a way? It's still an identifier of sorts. In my opinion this is not a bug in either Umbraco or .NET, but instead is a human error.
Oh yeah, I renamed the file, but thought the thread might prevent someone else from going mad :o)
Although if it had been me, I'd have written the validator code using a hashmap rather than hardcoded variables, even auto generated ones :o)
is working on a reply...