繁体   English   中英

无法从@ Url.Action访问变量

[英]Can not access variable from @Url.Action

我在ASP.Net MVC页面中有此Javascript

onComplete: function (id, fileName, responseJSON) {
    if (responseJSON.success) {
        $('#divImgs ul').append(
            $('<li>').append(
            $('<a>').attr('href', 
                '@Url.Action("DeleteFile", "Upload", new { id = fileName})').append(
            $('<img>').attr('src', responseJSON.filePath))
         ));
     }
 }

这给出了编译错误

The name 'fileName' does not exist in the current context

为什么我不能在@Url.Action访问fileName变量?

这个问题是@ Url.Action是在服务器端解析的,而filename是客户端上的javascript变量。 您最好打赌是这样的:

onComplete: function (id, fileName, responseJSON) {
    if (responseJSON.success) {
        $('#divImgs ul').append(
            $('<li>').append(
            $('<a>').attr('href', '@Url.Action("DeleteFile", "Upload", new { id = "' + filename + '" })').append(
            $('<img>').attr('src', responseJSON.filePath))
         ));
     }
}

可能有更好的方法将文件名附加到url,但是这里的想法是从服务器渲染基本url,然后根据需要使用javascript对其进行修改。

编辑:我同意haim77。 您需要将路由呈现给服务器端,而不是仅在客户端附加,以防路由格式改变。 但是在这种情况下,我们需要注入一些JavaScript。 因此,只需将变量注入路由即可将其解析为正确的格式,而且还会输出JavaScript兼容代码。

因为filename是一个仅存在于客户端的JavaScript变量,所以当View呈现自身时, @Url.Action在服务器端执行(之前)。

为了解决这个问题,我通常会做类似的事情:

@object URL_ACTION_PLACEHOLDER = "__MYPLACEHOLDER__";

// ...

onComplete: function (id, fileName, responseJSON) {
    if (responseJSON.success) {
        var myActionUrl = '@Url.Action("DeleteFile", "Upload", new { id = URL_ACTION_PLACEHOLDER })';
        myActionUrl = myActionUrl.replace('@URL_ACTION_PLACEHOLDER', fileName);

        $('#divImgs ul').append(
            $('<li>').append(
            $('<a>').attr('href', myActionUrl).append(
            $('<img>').attr('src', responseJSON.filePath))
         ));
     }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM