2009-08-03 14 views
9

Ho un segnaposto di contenuto che contiene un link:Variazione link href in segnaposto contenuti da codice C#

<asp:Content ID="Content5" runat="server" contentplaceholderid="ContentPlaceHolder3"> 
<a href= "../WOPages/WO_Main.aspx?WONum=12345">WorkOrder</a> 

e vorrei cambiare la querystring href dal codice. Come faccio a trovarlo per cambiarlo?

risposta

22

Se si aggiunge un id e un attributo runat="server" al tuo link ...

<a id="YourLink" runat="server" href="../WOPages/WO_Main.aspx?WONum=12345"> 
    WorkOrder 
</a> 

... allora è possibile accedere/modificare la proprietà HRef programmazione ...

YourLink.HRef = "http://stackoverflow.com/"; 
+1

Mi manca qualcosa di base qui (sono un principiante) Ho provato questo codice e sto ricevendo un errore 'Il nome YourLink non esiste nel contesto corrente' nella parte YourLink dell'istruzione YourLink.HRef. – dsteele

+0

L'ho appena capito: nei parametri Page del file .aspx, il parametro 'Codefile' puntava al nome del file: 'LabEdit.aspx.cs'. Avrebbe dovuto puntare al percorso: "~/WOPages/LabEdit.aspx.cs". So che non ho spostato il file di codice o il file di pagina, quindi questo è forse un problema con VS2008. – dsteele

1

Si potrebbe cancellare tutti i comandi dalla ContentPlaceHolder e quindi aggiungere un nuovo controllo collegamento ipertestuale in questo modo:

// Create your hyperlink control 
HyperLink lnk = new HyperLink(); 
lnk.NavigateUrl = "http://domain.com"; 
lnk.Text = "Click here"; 

ContentPlaceHolder3.Controls.Clear(); 
ContentPlaceHolder3.Controls.Add(lnk); 

o dare il collegamento ipertestuale un ID e aggiornare il collegamento ipertestuale trovando il controllo nel ContentPlaceHolder:

HyperLink lnk = ContentPlaceHolder3.FindControl("MyLink") as HyperLink; 
lnk.NavigateUrl = "http://domain.com/update/"; 
lnk.Text = "Click here too"; 
1

è possibile utilizzare il rendering tag o fare questo:

<a href="<asp:literal id="hrefString" runat="server"></asp:literal>" 

e assegnare il valore letterale nel codice.

0

Poiché il collegamento non è un controllo server, il segnaposto contiene un LiteralControl in cui il testo è il codice HTML. È possibile ottenere il codice HTML e sostituire l'attributo href:

LiteralControl c = Content5.Controls[0] as LiteralControl; 
c.Text = Regex.Replace(c.Text, "(href=\")[^\"]+(\")", "$1http://www.guffa.com$2"); 

Se si aggiunge runat="server" e un ID per il collegamento in modo che sia un controllo server, diventa molto più semplice, come si può solo impostare è HRef immobili .