好习惯mvc条件按钮及其代码

时间:2013-01-24 14:03:05

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

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

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

3 个答案:

答案 0 :(得分:3)

这听起来几乎就像您希望使用Javascript代码片段的存在/缺少来控制对服务器上的呼叫的访问。 不要那样做

您的服务器总是正在评估当前有关用户是否可以调用该操作。如果用户在浏览器中打开页面,并且发生某些应用程序状态更改会阻止用户调用该操作...但是他们的浏览器仍在显示按钮,该怎么办?或者,如果一个聪明的用户决定通过在源代码中进行搜索来解决您的URL问题?

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

答案 1 :(得分: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>

答案 2 :(得分:1)

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

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