4

I'm coding an MVC3 application with ajax and I got a situation.

I have to show na Button only if an condition is true. Ok its easy to do.

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

but this button going to call an ajax function.

Now my doubt is, WHERE A PLACE MY AJAX CODE?

if I do this:

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

      <button>OK</button>
    }

it's sound ugly code!!! It's seens that the code it' not in the right place but the ajax code is "safe", I mean, the ajax code will only exist if the button exist.

but if I place my code in head section, An advanced user will be able to call the ajax function.

or if a make an @if clause to enclose the script, I will duplicate code like this

<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>

So, What is the best practice to face this situation, the best approach?

4

3 回答 3

3

听起来您几乎想使用 JavaScript 代码片段的存在/缺失来控制对服务器上调用的访问。不要那样做

您的服务器应该始终评估该操作是否可以被相关用户调用。如果用户在他们的浏览器中保持页面打开,并且发生一些应用程序状态更改会阻止用户调用该操作......但他们的浏览器仍然显示按钮怎么办?或者,如果一个聪明的用户决定通过在源中四处寻找来玩弄你的 URL?

我建议将 javascript 放在一个公共位置并从那里调用它,因为这样可以将所有 Javascript 放在一起。

于 2013-01-24T14:09:53.073 回答
2

只要在你的标记中有一个条件,就像你有:

@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 回答