Javascript故障

Javascript故障,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,有人能解释一下为什么这个脚本不起作用吗 <script type="text/javascript"> function destroy(ID) { if (confirm("Deleting is a very bad thing! Sure?")) { location.href='@Url.Action("SomeAction", new { id = ID })' } } 功能销毁(ID){ if(确认(“删除是一件非常糟

有人能解释一下为什么这个脚本不起作用吗

<script type="text/javascript">
function destroy(ID) {
    if (confirm("Deleting is a very bad thing! Sure?")) 
    {
        location.href='@Url.Action("SomeAction", new { id = ID })'
        }
}

功能销毁(ID){
if(确认(“删除是一件非常糟糕的事情!确定吗?”)
{
location.href='@Url.Action(“SomeAction”,new{id=id})”
}
}

错误是:名称“ID”在当前上下文中不存在,出现在此处
new{ID=ID}

如果我只是这样替换ID:
new{ID=3}
它可以正常工作。问题出在哪里?

您将服务器代码与客户端代码混用

ID
是一个javascript变量-仅存在于客户端。
@Url.Action(“SomeAction”),服务器代码,仅存在于服务器上。

你不能把它们混在一起

您可以这样做:

function destroy(ID) {
    if (confirm("Deleting is a very bad thing! Sure?")){
        var url ='@Url.Action("SomeAction")';
        url += '/?id =' + ID;
        location.href = url;
    }
}
您必须记住,视图中的所有
@
内容都是在服务器中编译和执行的,不再存在于客户端中


顺便说一下,我会更改确认消息…

您将服务器代码与客户端代码混合使用

ID
是一个javascript变量-仅存在于客户端。
@Url.Action(“SomeAction”),服务器代码,仅存在于服务器上。

你不能把它们混在一起

您可以这样做:

function destroy(ID) {
    if (confirm("Deleting is a very bad thing! Sure?")){
        var url ='@Url.Action("SomeAction")';
        url += '/?id =' + ID;
        location.href = url;
    }
}
您必须记住,视图中的所有
@
内容都是在服务器中编译和执行的,不再存在于客户端中


顺便说一句,我会更改确认消息…

标记正确地括起来。问题是,您正在混合客户端脚本和服务器端脚本。“
ID
”在javascript中,它在服务器端asp中不“可见”。标记正确地括起来。问题是,您正在混合客户端脚本和服务器端脚本。“
”>ID
'在javascript中,它在服务器端asp中不“可见”。谢谢,几乎可以工作。将url+='/?ID='+ID;更改为url+='/'+ID;现在它工作正常。顺便说一句,确认消息不同:我故意更改了它=)@steavy.O.k.请注意,您的代码之所以有效,是因为它使用了global.asax中路由的默认设置。(id是默认参数的名称…)谢谢,几乎成功了。将url+='/?id='+id;更改为url+='/'+id;现在它工作得很好。顺便说一句,确认消息不同:我故意更改了它=)@steavy。好的。请注意,您的代码之所以有效,是因为它使用了global.asax中路由的默认设置。(id是默认参数的名称…)