Erstellen Sie einen ActionLink, das funktioniert mit einer javascript-Funktion
Ich habe eine datatable, die auf das datatable ich eine Html.ActionLink. Wenn ich auf diese Aktion verlinken, ich will senden Sie eine id für das Element eine javascript-Funktion und einen neuen datatable erscheinen unter mit all seinem Inhalt, das gehört zu den ausgewählten Eintrag in der Datentabelle oben. So zum Beispiel, wenn ich auf einer Studenten-Namen in einer Tabelle, ich möchte, dass alle Schüler Noten und Test erscheinen unten in einer separaten Datentabelle. Ich habe nie gearbeitet mit javascript viel, also bin ich nicht sicher, wie ich dies tun kann. Wenn jemand kann, bitte zeigen mich in die richtige Richtung oder ein paar Tipps geben, ich würde es zu schätzen wissen.
ursprünglichen ersten datatable:
@foreach (var item in ((List<Epic>) ViewData["selectedestimate"]))
{
<tr>
<td>
@* @Html.ActionLink(@item.Name, "action", "controller", new {id = item})*@
<a href="#" onclick="StoryClick(@item.Id);">@item.Name</a>
</td>
Javascript zu nennen:
<script type="text/javascript">
function StoryClick(story) {
$.get("@Url.Action("action", "controller")", function (response) {
$('#stories').accordion({ collapsible: true });
});
}
</script>
ActionController:
public List<EpicDetails> getEpicDetails(int id)
{
return eRepository.getItemsById(id).tolist();
}
Oder brauche ich eine ActionResult?
public Actionresult Details(int id)
{
}
Merke ich, dass ich nicht selbst schließen, sondern nur seine b/c ich bin nicht sicher, welche Schritte zu ergreifen, um dies zu tun.
Schließlich würde ich einen Akkordeon-und einen Tisch in das Akkordeon.
- Hey, wenn einer von uns geholfen hat, Sie auf Ihrem Weg sollten Sie sich upvotes und markieren Sie eine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Situationen wie diese, die ich tatsächlich gerne behalten, die
<a>
dieActionLink
erzeugt, und nur hinzufügen von JavaScript zu verbessern, das Verhalten der Verbindung. Also deine Ansicht wäre nicht wirklich ändern (ich habe eine Klasse hinzufügen, so dass wir die binden können einen event-handler, um es später):Dann schreiben einige jQuery (es sieht aus wie Sie haben bereits eine Abhängigkeit zu jQuery. Wenn nicht, kann ich revidieren, die Antwort zu verwenden, vanilla JavaScript) zum binden eines Ereignishandlers zu links mit der Klasse
item-link
:Und, ja, Ihre Aktion-Methode im controller zurückgeben sollte eine
ActionResult
. Es ist für mich schwer zu sagen, welche Art vonActionResult
sollten Sie Sie wieder, ohne wirklich zu wissen, welche Art von Daten, die Sie konsumieren wollen auf dem client, aber wenn Sie wollte, um zu injizieren, HTML auf die Seite, könnten Sie etwas schreiben wie dieses:Dann in der JavaScript, die Sie schreiben würde:
Wo
element_to_populate
wäre eine Auswahl, die Punkte, wo Sie wollen, um zu injizieren, die HTML.@class = 'item-link'
ist nur die Angabe einerclass
Attribut an die generiertena
tag. Es wird JS bindet Ereignisse auf links mit, dass die Klasse, obwohl (in derscript
block). Als für das Auffüllen der Tabelle, die Sie dienen könnte, bis ein Gesamtbild vom server, und injiziert in die Seite, oder Sie können senden Sie eine JSON-kodierte Liste der Elemente und JavaScript schreiben, zum füllen der Tabelle.$(function() { .... });
nun, dass man mithilfe von jQuery, damit es ausgeführt wird, wenn das Dokument fertig ist$(document).ready
handlerIch würde empfehlen, mit javascript templating (ich bevorzuge handlebars.js) auf der client-Seite und die Rückkehr Ihrer Studenten-Daten als JsonResult. Damit wird Ihre Bandbreite auf ein minimum.
Aber da scheinen Sie sich wohler mit der Rasierklinge, die Sie verwenden konnten, die für alle Ihre Vorlagen, Rückkehr einfache html-von Ihrem controller/Ansicht, und verwenden Sie dann diese javascript statt
In Ihrem Haupt-Seite, unter dem Schüler-Liste, Sie hätte nur hinzufügen müssen
Ihre anderen controller würde dann so Aussehen
Wenn Sie zurückkehren würden JSON zum client-side javascript templating würde es Aussehen wie
@Html.RenderPartial(model.TestGrades.First())