Daniel Hoelbling-Inzko talks about programming
I never cease to be amazed about Castle MonoRail, but this time I was really puzzled.
While working on a simple CRUD page I wrote code like this:
public void Unlock([ARFetch("id")] Member member) { PropertyBag["member"] = member; }public void Unlock([ARFetch("id")] Member member, DateTime expiration) { ...
My view was then just a standard form, a textfield and a submit button.
<form action="" method="POST"> <ul> <li> $FormHelper.LabelFor("expiration", "Account expiration date") $FormHelper.TextFieldValue("expiration", "29.01.2010") </li> <li> <input type="submit" value="Unlock" /> </li> </ul> </form>
And, you may have guessed it, I forgot to put a hidden field with the UserId in there somewhere!
Yes, I know – what a common mistake and what a bad one at that. But, and that’s the scary part. It worked still! I checked and re-checked, there is no Id anywhere passed as a result of the form submit, yet MonoRail somehow gets the Id from my previous call and works with that.
I couldn’t find the code inside MonoRail responsible for this behavior, and it seems only to work with Post requests to an empty action so far, but still amazing.
Well, since I can’t see the code, I remain skeptical and added the hidden id anyway. Witchcraft like this feels wrong, I like mysteries though.