JQUERY方法中的当前上下文中不存在名称参数

时间:2016-02-06 16:02:52

标签: javascript jquery asp.net-mvc

我有按钮,当它点击了进程事件并且参数传递给事件时。

这里是代码:

<input type="button" value="Accessing Layers" onclick="process('AccessingLayers');" />

 function process(actionName) {
        $.ajax({
            url: '@Url.Action(actionName)',
            type: 'POST',
            data: {
                sessionID: parent.parent.mapFrame.sessionId,
                mapName: parent.parent.mapFrame.mapName
            },
            success: function (result) {
                alert('Successfully passed data to controller');
            }
        });
    }

但是在这一行:

url: '@Url.Action(actionName)'

我收到此错误:

名称&#39; actionName&#39;在当前上下文中不存在

我知道为什么会出现上述错误?

如何解决?

3 个答案:

答案 0 :(得分:1)

请记住,在执行客户端代码之前,服务器上会执行razor代码。因此,您无法将javascript变量传递给类似的剃刀方法。

如果您仍想使用Url.Action帮助程序方法构建URL并将其传递给您的流程方法,则应使用正确的参数调用Url.Action方法(操作方法,控制器名称等)。并生成url并将url(由razor生成)作为字符串参数值传递给javascript方法

<input type="button" value="Accessing Layers" 
                           onclick="process('@Url.Action("AccessingLayers")')" />

和你的js代码

function process(actionUrl) {
        $.ajax({
            url: actionUrl,
            // existing code
        });
}

答案 1 :(得分:1)

<input type="button" value="Accessing Layers" id="btnAccessingLayers" />

和脚本部分

        $(document).ready(function () {
           $('#btnAccessingLayers').on('click', function(){
                process('@Url.Action("AccessingLayers")');
                }
        });

        function process(actionUrl) {
        $.ajax({
            url: actionUrl,
            // existing code
        });
}

答案 2 :(得分:-1)

引号之间输入的所有内容都被解析为纯文本,因此不会对检索actionName的值执行任何计算。

你必须像这样打破你的网址:

url:'@ Url.Action('+ actionName +')'

以便actionName被解析为变量。