Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connect HyperLinkField click to Server-side method (c#)

Tags:

c#

hyperlink

I have a HyperLinkField which I populate with the urls from a datatable, the field in the datatable is called EncodedAbsUrl.

However, I want to connect this link to a code behind method instead

What I do now

var encodedAbsUrl = new string[] { "EncodedAbsUrl" };
var hf = new HyperLinkField
{
    HeaderText = "Link",
    DataTextField = "ServerUrl",
    DataNavigateUrlFields = encodedAbsUrl,
    DataNavigateUrlFormatString = "{0}",
    Target = "_blank",
};

But id like to do something like this

var encodedAbsUrl = new string[] { "EncodedAbsUrl" };
var hf = new HyperLinkField
{
    HeaderText = "Link",
    DataTextField = "ServerUrl",
    NavigateUrl = clicker(encodedAbsUrl["{0}"]),
    Target = "_blank",
};


protected void clicker(string url)
{
    //...
}

Well you can see my attempts are unsuccessful :)

Any advice is appreciated

Thanks!

like image 248
Eric Herlitz Avatar asked Mar 10 '26 05:03

Eric Herlitz


1 Answers

if you will use HyperLinkField so you will not need to Clicker or any postback event because this field will be rendered as <a> tag. I made a sample example using HyperLink control and LinkButton control that will be postback your page.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        gv.DataSource = [YourDataSource];
        gv.DataBind();
    }
}
protected void Clicker(Object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Link")
    {
        Response.Redirect(e.CommandArgument.ToString());
    }
}
protected void gv_DataBinding(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink hlink = e.Row.FindControl("hlink") as HyperLink;
        hlink.NavigateUrl = ((Person)e.Row.DataItem).NavUrl;
        hlink.Text = ((Person)e.Row.DataItem).NavUrl;
        hlink.Target = "_blank";

        LinkButton lnkButton = e.Row.FindControl("lnkButton") as LinkButton;
        lnkButton.Text = ((Person)e.Row.DataItem).NavUrl;
        lnkButton.CommandName = "Link";
        lnkButton.CommandArgument = ((Person)e.Row.DataItem).NavUrl;
    }
}

you GridView will like this

<asp:GridView runat="server" ID="gv" OnRowCommand="Clicker" OnRowDataBound="gv_DataBinding"
    AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink runat="server" ID="hlink"></asp:HyperLink>
                <asp:LinkButton runat="server" ID="lnkButton"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
like image 176
Amir Ismail Avatar answered Mar 12 '26 17:03

Amir Ismail



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!