良好实践 MVC 条件按钮及其代码
本文关键字:按钮 代码 条件 MVC | 更新日期: 2023-09-27 17:55:53
我正在使用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 函数。
或者如果一个 make @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>
那么,面对这种情况的最佳实践是什么,最好的方法是什么?
听起来你几乎想使用Javascript代码片段的存在/缺乏来控制对服务器上调用的访问。不要那样做。
您的服务器应始终评估该操作是否可以由相关用户在此时调用。如果用户在浏览器中保持页面打开状态,并且发生了一些应用程序状态更改,这会阻止用户调用该操作,该怎么办?但是他们的浏览器仍然显示按钮?或者,如果一个聪明的用户决定通过在源代码中四处闲逛来玩弄您的 URL?
我建议把javascript放在一个公共的位置,然后从那里调用它,因为这会使你所有的Javascript保持在一起。
只需在标记中包含一个条件,就像您拥有的那样:
@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>
服务器应控制请求调用并检查正确的状态。 @Andrew Barber指出了这一点,但这不仅仅是让浏览器保持打开状态。但是高级用户可以与没有权限的其他人共享 ajax 请求,或者恶意使用它
试图更深入地回答这个问题,它可能不是像这样的简单脚本,而是一个文件或一些JS库,也许你无法控制ajax正在访问的服务器。在这种情况下,您可能希望复制验证。