So, I’m trying to have a field in a gridview which is a link that opens a details page, based on the row clicked. The details page works when I go to it manually, but I can’t seem to access it via calling a function which does a Response.Redirect(URL) – instead, I get the odd behavior that when the linkbutton is clicked, the page does a postback and stays on itself.
What am I doing wrong? Should I be using Server.Transfer() instead? I’d rather use redirect, because having the url update seems to me like an interface advantage in the use case I’m looking at.
This is part of a sharepoint webpart, the other page is on the same sharepoint server, and is a different collection of webparts.
<asp:Gridview ID="grdWU" runat="server" [+bunch of settings]>
<Columns>
<asp:TemplateField HeaderText="Workunit #" HeaderStyle-HorizontalAlign="Left">
<ItemTemplate>
<asp:Linkbutton ID="Workunit" runat="server" **OnClientClick="OpenDetails"** Text='<%# Bind("Workunit") %>'></asp:Linkbutton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:Gridview>
In the code behind class:
protected void OpenDetails(object sender, EventArgs e)
{
GridViewRow clickedRow = ((LinkButton) sender).NamingContainer as GridViewRow;
Button btnWorkunit = (Button)clickedRow.FindControl("Workunit");
//Response.Redirect(workunitdetailsurl + "?Workunit=" + activeworkunit.ID, true);
Response.Redirect("http://www.google.com");
}
Out of desperation/diagnosis, I tried to redirect to google instead of my crafted URL… still nothing. The page only refreshes itself. Am I doing something wrong?
Post-answer Edit: I guess I wasn’t properly understanding the difference between onclick and onclientclick.
Have you been able to confirm your event is actually firing? Try using the
OnClickevent of the LinkButton instead ofOnClientClick.Also, try using the second overload for
Response.Redirectwhich accepts a boolean indicating to end the execution of the current page: