2016-04-19 23 views
2

Webページが読み込まれたときにこのコードを実行しないようにしてください。Javascript onload MVC ASP .NET MVC

<input type="submit" class="btn btn-info col-md-pull-4" value="Download" id="mybutton" onclick="myFunction"> 

<script type="text/javascript"> 
function myFunction() { 
    document.getElementById("mybutton") = @api.function(); 
} 
</script> 

ページをロードするたびに、これがウェブAPIに接続し、api.functionコードを起動します。私は、私が持っているボタンがクリックされたときにのみこれが起こるようにしたい。

私はこれについて間違った方法をしていますか?

+0

投稿した内容に基づいてボタンをクリックしたときにだけその関数が呼び出されるため、すべてのコードが含まれているとは思われません。何が呼び出されているのか知りたければ、実行時にスタックトレースを見てください。これを行うには、関数に新しい行を追加し、 'debugger;'と書いて、その時点でスクリプトの実行を停止する開発者/デバッグツールを開いた状態でブラウザを選択します。次に、スタックトレースを見て、何を呼び出しているのかを把握します。 – Igor

+0

また、私は '@ api.function()'が何をしているのかわかりません、あなたはapiへの呼び出しがクライアントではなくサーバーから行われているのでしょうか? – Igor

+1

問題は、サーバー側のコードが実行されるときにサーバー側のコード '@ api.function()'が呼び出されることです。 ブラウザでソースを見ると(オープンページ、ソースを表示)、 '@ api.function()'の結果がソースに埋め込まれていることがわかります。 –

答えて

2

ポール:それ(@api.function())は、外部プログラムのワークフローを実行します。基本的には、異なるアプリケーションでプロセスを開始するだけです。 Razorをページロード時にレンダリングするのを止めるにはどうしたらいいですか?ボタンをクリックしたときだけですか?

短い回答 - いいえ。サーバーサイドとクライアントサイドのコードが混乱しています。区別があります。サーバーサイドのコードは、モデル、コントローラ、およびカミソリビューで実行されます。クライアント側のコードは、WebブラウザのコンテキストでJavaScriptを使用して実行されますが、このコードはサーバー側のコード/プロセスにアクセスできません。それが持つ唯一のアクセスは、ブラウザから実行されるものと同じアクセスです。URLを使用してサーバーにHTTP呼び出しを使用し、データを渡します。あなたは@api.function()はクリックで呼び出すことがしたい場合は

次のオプションがあります。

  1. ポストバック - /バックポストを作成して提出し、あなたのMVCコントローラから、このプロセスを開始します。この場合、クライアントスクリプトタグを完全に削除し、サーバーコードを使用してプロセスを開始します。
  2. 既存のMVCコントローラーまたは新しいWeb APIコントローラーで新しいパブリックメソッドを作成します。このメソッドをHttpPost属性でマークし、JQuery .ajaxコールを使用して呼び出します。これにより、フォームポストを必要とせずにコールを送信できます。
+1

わかりました。ありがとう@Igor – Paul

0

サーバーメソッドonloadを呼び出す理由がわかりません。初めから必要なデータを読み込めないのですか?いずれの場合に

jQueryを使って代替:かみそりは、(api.function @レンダリング)及びレンダリングの結果は、機能の実行であるため、発生し

$("#mybutton").on("click", function(){ 
    // call server 
}) 
0

。あなたは@ api.function()と何が何であるかを説明できますか?コメントから

+0

外部プログラムでワークフローを実行します。基本的には、異なるアプリケーションでプロセスを開始するだけです。 Razorをページロード時にレンダリングするのを止めるにはどうしたらいいですか?ボタンをクリックしたときだけですか? – Paul

+0

@Paul - no。クライアント側のコードとサーバー側のコードが混同されています。あなたは2を混ぜることはできません。 – Igor

+0

これは多分これがうまく説明されます: ページの読み込み時に、私はアプリケーションへの接続を開始します。 ページにhtmlを読み込むようにします。 ページ上にはボタンがあります。このボタンをクリックすると、Webサービスが機能を実行します。 コード: \t Webservice client = new Webservice(); \tの \t <スクリプトタイプ= "テキスト/ javascriptの"> \t \t function myFunction(){ \t \t \t document.getElementById( "myButton")= @ client.executeObject(); \t \t} \t – Paul