2009-05-19 7 views
2

Le scénario ... J'ai une liste de contrôles de lien hypertexte dynamiques sur un panneau ajax qui se lient directement à un document WORD situé sur un partage. Cliquer sur n'importe quel lien ouvre le côté client WORD (j'ai défini l'association de fichier pour faire cela afin que le navigateur IE n'essaie pas de l'ouvrir à la place). LinkButtons ne fonctionnera pas car il ne fait pas un lien direct vers le document depuis le navigateur et je ne veux pas d'automatisation du serveur ou activex, puisque je veux que chaque client ouvre le document en utilisant leur propre boîte comme si ils avaient simplement cliqué sur le document lui-même.Besoin d'un handle de publication à partir d'un contrôle de lien hypertexte dynamique cliqué dans ajax

Mais j'ai besoin de changer une image dans un contrôle d'image une fois qu'ils ont cliqué sur le lien hypertexte. En d'autres termes, j'ai besoin que le lien soit placé au-dessus d'un contrôle qui provoque une publication afin que je puisse obtenir l'identification des commandes de publication et faire ce que je veux. J'essaie également d'éviter les scripts côté client, même si je suis sûr qu'il peut y avoir une façon alambiquée de le faire.

Voici le code de la boucle qui crée le lien dynamique. J'ai commencé avec juste le contrôle de lien hypertexte, alors ce code est de déconner avec l'ajout d'un lien hypertexte vers une étiquette, c'est la raison pour laquelle celle-ci apparaît comme il est:

Label lblWordLink = new Label(); 
HyperLink hrefLetter = new HyperLink(); 
hrefLetter.Text = items.letterName;     
hrefLetter.NavigateUrl = folderForPackageLetters + items.letterName + wordDocExtension; 
hrefLetter.ID = "standardLettersHref_" + items.letterName; 
lblWordLink.Text = "<a href='" + hrefLetter.NavigateUrl.ToString() + "'>" + items.letterName + "</a>" ;     
tRow.Cells[1].Controls.Add(lblWordLink); 

Je suis à la recherche d'un moyen de laisser le lien ouvrir le doc et en même temps la publication. Existe-t-il un moyen de superposer le contrôle de lien au-dessus d'un autre contrôle de sorte que le lien ne fasse que des liens et que le contrôle en dessous provoque une publication?

32U

fixe: la réponse a donné l'idée. Sur le serveur, lors de la création de contrôle dynamique je l'ai fait:

HyperLink hrefLetter = new HyperLink(); 
hrefLetter.ID = "standardLettersHref_" + items.letterName; 
hrefLetter.Text = items.letterName;     
hrefLetter.NavigateUrl = folderForPackageLetters + items.letterName + wordDocExtension;        
hrefLetter.Attributes.Add("OnClick", "letterHrefClick('" + items.letterName + wordDocExtension + "')"); 
tRow.Cells[1].Controls.Add(hrefLetter); 

puis côté client, je poussé une valeur dans un contrôle caché à l'intérieur du panneau ajax lorsque le contrôle de lien a été cliqué et forcé soumettre:

function letterHrefClick(link) { 
    //alert(link); 
    form1.hdnLetterClick.value = link; 
    form1.submit(); 
} 

Après l'envoi, retour sur le côté serveur, j'ai la valeur dans l'événement Page_Load:

string x = hdnLetterClick.Value; 

nice!

mise à jour ... une meilleure façon de le faire ... dans l'utilisation javascript postback:

__doPostBack("hdnLetterClick", "somevalue"); 

puis dans le codebehind dans le Page_Init vous pouvez le faire (pas pour le bouton ou imgbutton):

string postbackControlID = Request.Params.Get("__EVENTTARGET"); 
string postbackArgument = Request.Params.Get"__EVENTARGUMENT"); 

pour obtenir ce dont vous avez besoin. Cela est préférable si vous manipulez des contrôles dynamiques afin de pouvoir contrôler l'état pendant la commande de contrôle.

+0

pourriez-vous mieux étiqueter la question? (est-ce asp ou quoi?) – Kornel

+0

c'est asp.net avec ajax. Je suppose que je pensais avec ajax dans la question que asp.net serait implicite. Ne pas voir un endroit pour ajouter des balises maintenant. – 32U

Répondre

1

Si vous attribuez à votre lien un attribut onclick, ces actions javascript doivent également être exécutées lorsque le lien est sélectionné.

+0

Je l'ai fait mais j'ai besoin d'obtenir la valeur côté client dans le code du serveur. – 32U

+0

Oui, vous avez raison. Je l'ai foiré la première fois. Je vais mettre les coupures de code dans ma question originale. Merci. – 32U

Questions connexes