【问题标题】:Good Practice mvc conditional button and its codeGood Practice mvc 条件按钮及其代码
【发布时间】:2013-01-24 14:03:04
【问题描述】:

我正在用 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>

那么,面对这种情况的最佳做法是什么,最好的方法是什么?

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯。我想我明白了。关键是,服务器端验证,对吧?所以,如果我遵循这个想法,javascript/ajax 代码的最佳位置是 head 部分.. 对吗?谢谢
    【解决方案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>
    

    【讨论】:

      【解决方案3】:

      服务器应该控制请求调用并检查正确的状态。 @Andrew Barber 指出了这一点,但这不仅仅是让浏览器保持打开状态。但是高级用户可以将ajax请求共享给其他没有权限的人,或者恶意使用它

      试图更深入地回答这个问题,它可能不是这样一个简单的脚本,而是一个文件或一些 JS 库,也许你无法控制你 ajax 正在访问的服务器。在这种情况下,您可能需要重复验证。

      【讨论】:

        猜你喜欢
        • 2010-11-15
        • 1970-01-01
        • 2011-11-10
        • 1970-01-01
        • 1970-01-01
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多