Well, I found why and how : http://aspadvice.com/blogs/joteke/archive/2006/04/30/17118.aspx
Answer:
Well,
cross-page postbacks are implemented using javascript. And when you put
return statement like that it ends up into onclick of the rendered
button. For example Button like this
<asp:Button ID="Button2" runat="server" Text="Button" PostBackUrl="~/Default4.aspx" OnClientClick="return confirm('Hello');" />
renders
<input type="submit" name="Button2" value="Button" onclick="return confirm('Hello');WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions("Button2",
"", false, "",
"Default4.aspx", false, false))" id="Button2" />
As you can see,
this effectively prevents rest of the postbacking script from
functioning since whatever confirmation box returns, it won't let
postback options to be set and therefore prevents cross-page
postbacking from working.
Answer is to change confirm check so that it returns only when user click Cancel.
Put the OnClientClick as
OnClientClick ="if(!confirm('OK?'))return false;"
Then the rendered onclick attribute changes
onclick="if(!confirm('OK?'))return false;WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions("Button2",
"", false, "",
"Default4.aspx", false, false))"