Les variables JavaScript portent un identifiant que je dois utiliser dans un fichier HTML.ActionLink

J’ai une variable JavaScript dans mon code jQuery qui contient un identifiant que je dois utiliser dans mon Html.ActionLink mais cela ne fonctionne pas:

 @(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null)) 

Je reçois: ‘ne peut pas résoudre le symbole “goalcard”‘, et la raison en est que la goalcard est une variable JavaScript.

Voici à quoi ça ressemble:

 $.post('@Url.Action("Search", "SearchNKI")', data, function (result) { $("#GoalcardSearchResult tbody").empty(); result.forEach(function(goalcard) { $("#GoalcardSearchResult tbody").append( $('', { // steg Create a row for each result html: "" + goalcard.Name + "" + goalcard.Customer + "" + goalcard.PlannedDate + "" + goalcard.CompletedDate + "" + '@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null))' + "" })); }); }); 

Je teste depuis un moment et j’ai presque trouvé une solution qui ressemble à ceci:

 @(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI",null, new {id = "mylink"})) 

alors j’ai créé une nouvelle fonction:

 $('#mylink').click(function (goalcard) { var id = goalcard.Id; this.href = this.href + '/' + id; }); 

Cela devrait fonctionner, mais ce qui se passe est que je dois utiliser cette fonction de clic à l’intérieur de la boucle forEach pour pouvoir atteindre une variable de but. et si je le mets dans le forEach , cette fonction de clic sera exécutée plusieurs fois en fonction du nombre de buts marqués.

Donc, le résultat serait /AnswerNKI/AnswerForm/1/2 s’il y a deux cartes de buts. ou peut /AnswerNKI/AnswerForm/1/2/3/4/5 être /AnswerNKI/AnswerForm/1/2/3/4/5 s’il y a cinq cartes de buts.

Mais cela devrait être /AnswerNKI/AnswerForm/1

en gros,

Un autre problème est que toutes les autres lignes ont /AnswerNKI/AnswerForm/ sorte que seule la première ligne obtient un identifiant.

Je ne sais pas comment trouver une solution pour résoudre ce problème.

Toute aide est très appréciée.

Merci d’avance

Ce n’est pas une solution au problème spécifique que vous rencontrez. Mais il semble que vous utilisiez jQuery pour mettre à jour une partie de votre page.

Si tel est le cas, avez-vous envisagé d’utiliser un rappel qui renvoie le code HTML généré par un PartialView et d’effectuer simplement un remplacement dans le rappel javascript? C’est un motif que j’utilise beaucoup. Il vous permet d’utiliser le moteur, les composants et les outils de conception de MVC.

Voici un exemple de ce que je fais:

 $("form.unscoped_filter").live("submit", function () { $.ajax({ url: this.action, type: this.method, data: $(this).serialize(), error: function (a, b) { debugger; }, success: function (result) { $("div#targetID").html(result); bindExtenders(); } }); return false; }); 

Cet exemple particulier intercepte une publication d’une classe particulière de formulaires et la transmet au site Web sur lequel elle est traitée par l’application MVC. La méthode cible et le contrôleur sont définis, selon les approches de conception MVC habituelles, dans un bloc BeginForm. La méthode cible traite les données et renvoie un PartialView qui convertit ces données en HTML, lequel est à son tour envoyé au rappel de réussite dans le bloc jQuery. Là, il est utilisé pour remplacer le code HTML dans la div cible. Bien que plusieurs parties soient en jeu (par exemple, le javascript, la méthode MVC, le PartialView), séparer les éléments de cette manière permet à chaque partie de jouer selon ses atouts: jquery est formidable pour manipuler le DOM, les méthodes MVC sont géniales pour manipuler / traiter Les requêtes HTML, et PartialViews, sont un excellent outil pour la mise en page et la génération de HTML.

C’est une approche assez flexible et puissante une fois que vous avez compris. En particulier, vous pouvez passer des parameters dans le bloc jquery à partir du lien de liaison Action en utilisant les techniques html5. Par exemple, vous pouvez append un “data-someParamName = …” aux atsortingbuts html de l’appel ActionLink, puis extraire la valeur du paramètre dans le bloc javascript en effectuant quelque chose comme:

 var pagerCode = $(this).attr("data-someParamName"); 

C’est en fait de cette manière que je contrôle quelle div en particulier est mise à jour dans la fonction de rappel de réussite.

Encore une fois, cela ne répond pas à votre question précise, mais suggère une manière différente d’aborder ce que je pense que vous essayez de faire. Bonne chance!