It’s a kind of magic: MonoRail
October 21, 2009 by Daniel HoelblingI 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.