2017-02-07 17 views
0

Ich habe eine Schaltfläche, die ich benutze, um eine Teilansicht über JQuery AJAX aufrufen, die bei Erfolg, ersetzen Sie einfach einen div Halter durch die JSON-Zeichenfolge zurückgegeben wird.Javascript in MVC Teilansicht nur zum ersten Mal ausgeführt

Die Teilansicht besteht aus einigen Javascript- und HTML-Tags. Ich muss den jquery.ajax dataType: "html" setzen, damit das Javascript in der Teilansicht ausgeführt wird, wenn es geladen wird.

In der übergeordneten Ansicht:

$("#test2Div").on("click", function() { 
    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("GetMainSolution", "Solutions")', 
     data: { IdEjercicioSolucion: 9 }, 
     cache: false, 
     dataType: "html", 
     success: function (response) { 
      $("#placeHolder").html(response.ViewContent); 
     } 
    }); 
}); 

Das Problem ist, dass dies nur zum ersten Mal fein arbeitet ich die Teilansicht laden. Sobald es zum ersten Mal ausgeführt wird, scheint es, dass das Javascript, das in der Teilansicht enthalten ist, die gerendert wird, nicht mehr ausgeführt wird oder etwas im DOM verpasst wird. Wenn ich die gesamte Seite mit F5 aktualisiere und die Teilansicht erneut lade, wird es wieder zum ersten Mal funktionieren.

Bitte, irgendwelche Ideen?

EDIT 1: mehr Beispielcode hinzu:

Elternteil Ansicht: Dies ist die Hauptansicht ist. Es zeigt eine weitere Teilansicht an, die einige Felder und eine Schaltfläche enthält. Wenn Sie auf diese Schaltfläche klicken, rufen Sie die Funktion UpdateChViewerLayoutForm auf, die folgende Teilansicht in das aqviewerholder div lädt.

<div id="dvContainer"> 
 

 
    <div class="container"> 
 
     <div class="row"> 
 
       @Html.Partial("SolutionsCursoSelectedPartial", Model)    
 
     </div> 
 
     <div class="row"> 
 
       <div id="aqviewerholder"></div>    
 
     </div> 
 
    </div> 
 
</div> 
 

 
<script type="text/javascript"> 
 
    function UpdateChViewerLayoutForm(s, e) { 
 

 
     $.ajax({ 
 
      type: "POST", 
 
      url: '@Url.Action("GetSolucionsAQV", "Solutions")', 
 
      data: { IdES: s.GetValue() }, 
 
      success: function (response) { 
 
       $("#aqviewerholder").html(response.ViewContent); 
 
      } 
 
     }); 
 
    } 
 
    
 
    </script>

Teilansicht (SolutionsAQv):

@Code 
 
    If Model IsNot Nothing Then 
 
     @Html.Raw(Model.TextoHTML) 
 
    End If 
 
End Code 
 

 

 
<script src="~/Content/AQv/rm.js" type="text/javascript"></script> 
 
<script src="~/Content/AQv/bm.js" type="text/javascript"></script> 
 
<script src="~/Content/AQv/nn.js" type="text/javascript"></script>

Bitte beachten Sie, dass der Inhalt Modell geliefert analysiert werden muss, um die Skripte in Teilansicht mit .

Dies funktioniert ordnungsgemäß in der ersten Ladung, aber nicht in den folgenden. Wenn Sie die ganze Seite aktualisieren, funktioniert es wieder.

Ich denke, es kann etwas mit der Tatsache zusammenhängen, dass Teilansichten über Ajax Javascript nicht ausführen? oder dass Javascript findet nicht das Ziel in dem DOM in den folgenden exceutions? ... aber ich weiß wirklich nicht, wie es weitergeht ...

Vielen Dank

+0

Es ist schwer zu sagen, ohne mehr Code zu sehen. Was passiert, wenn Sie einen Debugger setzen? Linie in deinen Code? –

+1

Fast sicher, weil das von Ihnen zurückgegebene HTML ein Element mit 'id =" test2Div "' enthält und Sie das vorhandene ersetzen. Sie müssen [Ereignisdelegierung] https://learn.jquery.com/events/event-delegation/) - '$ (document) .on ('click', '# test2Div', function() {... .'(aber ersetzen' Dokument' mit dem nächsten Vorfahren, der existiert, wenn die Seite zum ersten Mal gerendert wird –

+0

Ich habe meinen Beitrag mit echtem Code aktualisiert, um die Frage zu klären. Danke. –

Antwort

0

Eine Möglichkeit besteht darin, dass Ihre Teilansicht enthält gleiche jQuery oder andere Javascript-Pakete wie in der Hauptansicht. Sobald sie zum ersten Mal gerendert werden, haben Sie zwei solche Sets (eines aus Ihrer Hauptansicht und eines aus Ihrer Teilansicht). Stellen Sie sicher, dass Sie nur ein Paket auf Ihrer Webseite haben und keine Bündel wiederholen.

Das ist mir passiert.

S.: Dies ist eine Möglichkeit! Nein, ich sage das ist der einzige Grund. Ich dachte nur, das könnte eine Möglichkeit sein

Verwandte Themen