2016-12-15 6 views
-2

Was ich geschrieben habe funktioniert und bin auf der Suche nach mehr Verständnis, wenn es um Ereignisse von Javascript vs Ereignisse gefeuert zu einer MVC Aktion gefeuert kommt. Das Javascript, das ich habe, setzt einen Wert wahr oder falsch basierend auf der Schaltfläche, die gedrückt wird. Ist die Form gebunden oder ist sie nicht gebunden, handelt es sich um die Benutzeraktionen. Bei der gleichen Instanz (glaube ich) übergibt das Drücken der Taste das Formular an meinen Controller.Javascript Klick Ereignis vor MVC Aktion Anruf

Hier ist was ich beschreibe. Direkt unten ist das Formular, das ich über die Schaltfläche klicke.

@using (Html.BeginForm("RejectInsertComment", Model.controller, FormMethod.Post, new { @class = "modal-form" })) 
{ 
    <!-- form elements --> 
      .... 
    @Html.HiddenFor(x => x.is_pended) 
    <input type="submit" class="PendLink btn btn-primary" name="Pend" value="Pend"/> 
    <input type="submit" class="CompleteLink btn btn-primary" name="Complete" value="Complete" /> 
} 

Dann hier ist das Javascript, den Wert von pend umschalten.

$('.PendLink').click(function() { 
      $('#is_pended').val(true); 
     }); 
$('.CompleteLink').click(function() { 
      $('#is_pended').val(false); 
     }); 

Dies funktioniert, und ich nehme an, die Javascript Feuer zuerst auf dem Client, aber wie weiß MVC zu warten?

Antwort

2

Kurz gesagt, hat ASP.NET MVC nicht wirklich Ereignisse, das Formular wird einfach an die Aktion URL, die zur Verfügung gestellt wird; Das hat nichts mit ASP.NET MVC zu tun. Fast immer wird Javascript erfolgreich ausgeführt, bevor das Formular übermittelt wird (abhängig davon, wie schnell das vorhandene Javascript ausgeführt werden kann). Wenn Sie wirklich Javascript sicherstellen wollen, läuft vor dem Formular abgeschickt wird, müssen Sie eine Methode wie folgt verwenden:

<form onsubmit="return mySubmitFunction()"> 
    ... 
</form> 
<script> 
function mySubmitFunction(evt) { 
    evt.preventDefault(); 
    someBug(); 
    return false; 
} 
</script> 
+0

Interessant. Obwohl das Sinn macht. Wenn ich komplizierteres JS machen würde, sollte ich vielleicht die preventDefault Methode benutzen. Würdest du vorschlagen, dass ich das mit dem Klick-Event mache? – Jared

+0

Aktualisiert: Dies ist eine Möglichkeit, wenn Sie das Formular nicht senden und nur eine js-Funktion ausführen möchten. Wenn Sie beide mit JS als erstes ausführen möchten, können Sie eine normale Schaltfläche anstelle einer Übergabeschaltfläche verwenden und $ ("# yourFormId") eingeben. Submit(); am ende deiner js-funktion. – FailedUnitTest

1

Du hast es falsch, gibt es keine MVC, sobald Ihr Browser die Antwort vom Server bekommt. MVC ist nur serverseitig. Alle Ihre .cshtml Dateien werden in einfache HTML umgewandelt und als Antwort zurückgesendet.

Also dieser Code von Ihnen @using (Html.BeginForm(.. wird in ein HTML form Tag geändert werden.

Also in Wirklichkeit haben Sie nur mit HTML auf Client-Seite zu tun.

So kommen jetzt zu dem Teil von Jquery Ausführung vor dem Senden. Ja, immer wenn Ereignisse an Ihr DOM gebunden sind (klicken Sie in diesem Fall auf Ereignis), werden die Ereignisse nacheinander ausgeführt. Also in Ihrem click Handler Wenn Sie das Ereignis nicht stoppen (zB: e.preventDefault()) dann wird das Formular als nächstes Ereignis gesendet.

Verwandte Themen