2016-12-15 4 views
-2

私が書いたことは、MVCアクションに発生したイベントとjavascriptイベントから発生したイベントについて、もっと理解しています。私が持っているJavaScriptは、押されたボタンに基づいて真または偽の値を設定します。保留中のフォームか保留されていないかは、ユーザーの操作です。同じ事例(私は信じている)では、ボタンを押してフォームをコントローラに送信します。MVCアクションコールの前にJavascriptをクリックするイベント

ここに私が記述しているものがあります。ちょうど私がボタンクリックで提出するフォームです。

@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" /> 
} 

ここでは、pendの値を切り替えるjavascriptがあります。

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

これは動作しますが、私は、クライアント上で最初のJavascriptの火災を想定したが、どのようにMVCを待つために知っているのですか?

答えて

2

つまり、ASP.NET MVCには実際にイベントがありません。フォームは単に提供されたアクションURLに送信されます。これはASP.NET MVCとは関係ありません。ほとんどの場合、javascriptはフォームが送信される前に正常に実行されます(javascriptの実行速度に応じて)。あなたが本当にフォームが送信される前に、ジャバスクリプトが実行を確実にしたい場合は、このような方法を使用する必要があります:あなたはそれが間違っていました

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

興味深い。しかし、それは意味をなさない。もっと複雑なJSをやっていたら、おそらくpreventDefaultメソッドを使うべきです。クリックイベントでこれを行うとお勧めしますか? – Jared

+0

更新:これは、フォームを送信してjs関数のみを実行したくない場合に行う方法の1つです。 JSを最初に実行する場合は、サブミットボタンの代わりに通常のボタンを使い、$( "#yourFormId")を実行することができます。あなたのjs関数の最後に。 – FailedUnitTest

1

をお使いのブラウザがサーバからの応答を取得したら、何のMVCはありません。 MVCはサーバー側のみです。すべての.cshtmlファイルは平文HTMLに変換され、応答として返送されます。

このコード@using (Html.BeginForm(..は、formタグに変更されます。

実際には、クライアント側のHTMLだけを扱っています。

これで、フォームの送信前にJqueryが実行されるようになりました。はい、これまでにDOMにバインドされたイベント(この場合はクリックイベント)が発生すると、イベントは順番に実行されます。そう、あなたのclickハンドラであなたがイベントを停止しない場合(例えば:e.preventDefault())、次のイベントとしてフォームが提出されます。

関連する問題