为什么我变量未声明

时间:2017-12-04 13:23:38

标签: javascript

我在部分视图中有以下内容......

@Model.ServerDetails
<div>
..... various markup
</div>
<script type="text/javascript">
    var bs = '@Model.BackupServer';
    if (bs == null) {
        bs = "";
    }
    var bssn = bs + '|' + '@Model.ServerName';

    $(document).ready( function() {
        if (bs != "") {
          $getJSON('@UrlContent("~/Details/OtherBackedUpServers?bsn=" + bssn)', function(returnedServers) {
             ..... removed for brevity...
          }
        }
    });

$ getJSON()参数中的 bssn 显示错误:未声明'bssn'。由于其保护级别,它可能无法访问。

有人可以解释为什么以及如何纠正它?

由于

2 个答案:

答案 0 :(得分:1)

您无法将JavaScript(客户端)变量传递给Url.Action,因为它是在服务器端处理的。

作为解决方法,您可以使用占位符来生成网址。然后使用.replace()方法生成实际网址。

var url = '@Url.Action("OtherBackedUpServers", "Details", new { bsn= -1})';
url = url .replace('-1', bssn);
$.getJSON(url );

或者,更好地将变量作为有效载荷传递

$.getJSON('@Url.Action("OtherBackedUpServers", "Details")', { bsn : -1});

答案 1 :(得分:0)

或写:

$getJSON('@UrlContent("OtherBackedUpServers", "Details")?bsn=' + bssn, function(returnedServers) {
             ..... removed for brevity...
          }

<强> CORRECTION

$getJSON('@Url.Action("OtherBackedUpServers", "Details")?bsn=' + bssn, function(returnedServers) {
             ..... removed for brevity...
          }