In a sense, you don't really "open some page", but in fact navigate to a given page.
So, say we have a button on FormA.aspx, and we want to open (well, better stated navigate to) FormB.aspx?
Then our button would be this:
<asp:Button ID="cmdOpenA" runat="server" Text="Open Page B"
OnClick="cmdOpenA_Click"
/>
So, the above would be our button in FormA.aspx. The code behind, to jump to FormB.aspx then could be this:
Protected Sub cmdOpenA_Click(sender As Object, e As EventArgs)
Response.Redirect("FormB.aspx")
End Sub
Now, often, one might include the full path name in the code, so above thus might be:
Response.Redirect("~/Testing/FormB.aspx")
So, above would be from the root (start of base site), and then in a folder called Testing, we open the formB.aspx).
This of course would thus "navigate" to the new page. So, the term "open a page" probably not the best terminology here. Now, perhaps when you click the button, we want to open another browser tab? Again, not a great UI, and think of say when you use this site to ask your question? You click buttons, navigate around - but we not really "opening" new browser tabs, are we?
So, in web land, the idea of "opening" a page is better stated that we are to click on a button, and "navigate" to another page.
And that button could even be say inside of a simple Gridview. Say this markup:
<asp:GridView ID="GHotels" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" CssClass="table table-hover"
width="40%">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:Button ID="cmdEdit" runat="server"
Text="Edit" CssClass="btn"
OnClick="cmdEdit_Click" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
So, in above, we have a standard button. (to edit the row of data).
So, clicking the button, then we have this effect:

And the code behind that button?
this:
Protected Sub cmdEdit_Click(sender As Object, e As EventArgs)
Dim btn As Button = sender
Dim gRow As GridViewRow = btn.NamingContainer
Dim intPK As Integer = GHotels.DataKeys(gRow.DataItemIndex)("ID")
Session("PK") = intPK
Response.Redirect("EditOneHotel.aspx")
End Sub
So, once again, note how we really don't "open" a new form, but better stated is we navigate to that form. The above button code thus gets the current row PK of the database. We then navigate to the 2nd page which displays the hotel, allowing one to edit, or cancel.
Now, we could for example pop up, or pop open a dialog in place of navigating to the new/difference .aspx page. I tend to prefer this approach, and then the above would look like this:

So, in web land, as opposed to desktop land, the term "open" a page requires more explain on your part. Since it not clear if you want:
To jump/navigate to a new page when clicking a button.
Pop open a dialog of some type?
Open a new tab in the browser?
You have lots of choices here, but the general idea is that when you click on a button, you can most certainly "jump" or navigate to a difference page, and I suppose could say we are "opening" that new page, but we are in near call cases actually navigating to that new page.
So for button click code? You just use Response.Redirect("page to jump here")