2016-08-15 4 views
4

にロードする複数のJavaScriptのスクリプトを防止、私はこのPrimitiveViewComponentを持っています関数sayHelloが3回含まれるため、あいまいさがありますが、これは必須ではありません。は、例えばAsp.NetコアViewComponents

ViewComponentsのJavaScript関数をどのように定義する必要がありますか。複数回それらを含むことができないようにするにはどうすればいいですか?

答えて

0

この問題を管理する方法はサーバー側にあるとは思いません。しかし、JavascriptとJQueryを使ってこの問題を解決できます。

このコードでは、スクリプトをwwwrootのjsフォルダのscripts.jsファイルに移動しました。ページを読み込んでいるときにSayHelloが関数か未定義かをチェックしていますが、関数であればページにロードされていることを意味し、定義されていない場合はJScriptのgetscriptメソッドを使用してスクリプトをロードしています。

ここにビューコンポーネントコードがあります。

<button type="button" onClick="sayHello()">Hello</button> 
<script> 
    if (typeof sayHello !== 'function') { 
     $.getScript("/js/scripts.js").done(function(script, textStatus) { 
      console.log(textStatus); 
     }); 
    } 
</script> 

はそれが私がスクリプトがモデルに含まれているかどうかを指定しをScriptIncluded、およびサーバ側でプロパティの状態を維持するようにあなたは、プロパティを定義するべきだと思い

+0

'$ .getScript(" /js/scripts.js ")'がWebアプリケーションの潜在的なセキュリティホールになる可能性がありますか?はいの場合、どうすればそれを保護できますか? –

0

をお役に立てば幸いです。このようなコンポーネントを呼び出す真のたびにするかどうかをScriptIncludedプロパティを確認してください:あなたのコンポーネントクラス定義で

<button type="button" onClick="sayHello"></button> 
@if(model.ScriptIncluded){ 
    <script> 
     function sayHello(){ 
     } 
    </script> 
} 

をコンポーネントが初めて呼び出されていない場合、あなたはmodel.ScriptIncluded = True;を設定する必要があります。あなたはHttpContext.Itemsにブール値を保つことができます。