连接超链接字段单击服务器端方法(c#)

连接超链接字段单击服务器端方法(c#),c#,hyperlink,C#,Hyperlink,我有一个HyperLinkField,我用datatable中的URL填充它,datatable中的字段称为EncodedAbsUrl 但是,我想将此链接连接到代码隐藏方法 我现在做什么 var encodedAbsUrl = new string[] { "EncodedAbsUrl" }; var hf = new HyperLinkField { HeaderText = "Link", DataTextField = "ServerUrl", DataNaviga

我有一个HyperLinkField,我用datatable中的URL填充它,datatable中的字段称为EncodedAbsUrl

但是,我想将此链接连接到代码隐藏方法

我现在做什么

var encodedAbsUrl = new string[] { "EncodedAbsUrl" };
var hf = new HyperLinkField
{
    HeaderText = "Link",
    DataTextField = "ServerUrl",
    DataNavigateUrlFields = encodedAbsUrl,
    DataNavigateUrlFormatString = "{0}",
    Target = "_blank",
};
但是我想做这样的事情

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


protected void clicker(string url)
{
    //...
}
<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>
你可以看到我的尝试没有成功:)

任何建议都将不胜感激


谢谢

如果希望能够以所需的方式回发到服务器,则需要使用
链接按钮

此类有一个
OnClick
事件,与您一直使用的
HyperLinkField
不同


如果要使用
超链接字段
,您可以找到有关的更多信息。

,因此无需单击
或任何回发事件,因为此字段将呈现为
标记。我使用
HyperLink
控件和
LinkButton
控件制作了一个示例,该控件将发回您的页面

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;
    }
}
GridView
会喜欢这个

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


protected void clicker(string url)
{
    //...
}
<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>


是否应该
clicker
方法返回字符串??不一定,它应该类似于受保护的void clicker(对象发送器,CommandEventArgs e),您将集合绑定到哪个控件?一个称为gw的gridview。因此,我通过键入gw.Columns.add(hf)来添加HyperLinkField;