2011-06-26 45 views
1

我有一個HyperLinkField,我從數據表中填充urls,數據表中的字段被稱爲EncodedAbsUrl。連接HyperLinkField點擊到服務器端方法(c#)

不過,我想這個鏈接連接到後面方法的代碼,而不是

我現在在做什麼

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) 
{ 
    //... 
} 

那麼你可以看到我的嘗試是不成功的:)

任何意見讚賞

謝謝!

+0

應該'clicker'方法返回的字符串? –

+0

不一定,它應該像保護無效clicker(對象發件人,CommandEventArgs e) –

+0

控制你綁定你的集合? –

回答

5

如果您將使用HyperLinkField,那麼您將不需要0​​或任何回發事件,因爲此字段將呈現爲<a>標記。我使用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會喜歡這個

<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> 
4

如果您希望能夠以您需要的方式回發到服務器,則需要使用LinkButton

這個班有一個OnClick事件,不像你使用的HyperLinkField

你可以找到更多關於LinkButton class here的信息。