The problem is that your ControlParameter can't find the control that's nested inside a DetailsView (because it is in a different ContentTemplate). There are usually two ways to solve this issue.
Approach #1: Use the "$" symbol to access the nested control.
You can update your markup to something like this:
<asp:ControlParameter ControlID="DetailsView1$update" Name="xcontent"
PropertyName="Text" Type="String" DefaultValue="%" />
Using {outerControlID}${innerControlID}
will allow your ControlParameter to find the nested control.
Approach #2: Add the parameter in code-behind.
You can programmaticaly add the control to the UpdateParameters collection in your codebehind. This is a bit more of a hack, but I can throw out an example if you need one.