4

私はajaxでMVC3アプリケーションをコーディングしていますが、状況が発生しました。

条件が真の場合にのみ、naボタンを表示する必要があります。わかりました。簡単です。

@if (Model.AAA == ENUM.AAA)
    {
      <button>OK</button>
    }

しかし、このボタンはajax関数を呼び出します。

今私の疑問は、私のAJAXコードをどこに置くかということです。

私がこれを行う場合:

@if (Model.AAA == ENUM.AAA)
    {
      function OK(){
          $.ajax({}); 
      }

      <button>OK</button>
    }

それは醜いコードです!!! コードは適切な場所にありませんが、ajaxコードは「安全」であることがわかります。つまり、ajaxコードは、ボタンが存在する場合にのみ存在します。

しかし、コードをheadセクションに配置すると、上級ユーザーはajax関数を呼び出すことができます。

または、スクリプトを囲む@if句を作成する場合は、次のようなコードを複製します

<head type="text/javascript">
   @if (Model.AAA == ENUM.AAA){
      function OK(){
         $.ajax({});
      }
   }
</head>
....
<body>
   ....
    @if (Model.AAA == ENUM.AAA)
    {
      <button onclick="OK()">OK</button>
    }
    ....
 </body>

では、この状況に直面するためのベストプラクティス、ベストアプローチは何ですか?

4

3 に答える 3

3

サーバー上の呼び出しへのアクセスを制御するために、Javascriptコードのスニペットの有無を使用したいと考えているようです。それをしないでください

サーバーは、その時点で問題のユーザーがアクションを呼び出すことができるかどうかを常に評価している必要があります。ユーザーがブラウザでページを開いたままにし、アプリケーションの状態が変化してユーザーがそのアクションを呼び出せなくなる場合はどうなりますか...しかし、ブラウザにはまだボタンが表示されていますか?または、賢いユーザーがソースをざっと見てURLをいじくりまわすことにした場合はどうでしょうか。

javascriptを共通の場所に置き、そこから呼び出すことをお勧めします。これにより、すべてのJavascriptがまとめられます。

于 2013-01-24T14:09:53.073 に答える
2

次のように、マークアップに条件付きのものを1つだけ入れます。

@if (Model.AAA == ENUM.AAA)
{
  <button id="OkButton">OK</button>
}

次に、Javascriptを少し調整して、Razorを含めないようにします(そうすれば、外部JSファイルに抽出できます)。

<head type="text/javascript">

    WireUpButton();

    function WireUpButton() {
        var okbutton = document.getElementById("OkButton");

        if (okbutton) {
            okbutton.onclick = OK;
        }
    }

    function OK(){
     $.ajax({});
  }
</head>
于 2013-01-24T14:09:03.217 に答える
1

サーバーは要求呼び出しを制御し、正しい状態を確認する必要があります。@Andrew Barberはこれを指摘していますが、それはブラウザを開いたままにするだけではありません。ただし、上級ユーザーは、権限を持たない他のユーザーとajaxリクエストを共有したり、悪意を持って使用したりする可能性があります

質問にもう少し詳しく答えようとすると、このような単純なスクリプトではなく、ファイルまたはJSライブラリである可能性があります。おそらく、ajaxがアクセスしているサーバーを制御できません。その場合、おそらく検証を複製することをお勧めします。

于 2013-01-24T15:44:27.400 に答える