我正在用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>
那么,面对这种情况的最佳做法是什么,最好的方法是什么?
答案 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正在访问的服务器。在这种情况下,您可能希望复制验证。