Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问razor块中的局部js变量_Javascript_C#_Razor_Asp.net Mvc 5 - Fatal编程技术网

Javascript 访问razor块中的局部js变量

Javascript 访问razor块中的局部js变量,javascript,c#,razor,asp.net-mvc-5,Javascript,C#,Razor,Asp.net Mvc 5,我试图在javascript中编写razor代码,我试图在razor代码中使用局部变量。以下是示例代码: <script type="text/javascript"> for (i = 0; i < data.result.length; i++) { $("#member-table tbody").append("<tr>"); var id = data.result[i].MemberId; var actions =

我试图在javascript中编写razor代码,我试图在razor代码中使用局部变量。以下是示例代码:

<script type="text/javascript">

for (i = 0; i < data.result.length; i++) {
     $("#member-table tbody").append("<tr>");

     var id = data.result[i].MemberId;

     var actions = $("<td>" + @Html.ActionLink("Detay", "Edit", new { id })  + "</td>)");
}
</script>

对于(i=0;i

问题是razor代码无法识别
id
(即,它在当前上下文中不存在)。我怎样才能做到这一点?有什么办法吗?

如果您只是使用默认路由,那么就不用麻烦使用Razor@Html.ActionLink。使用显式标记:

var actions = $('<td><a href="/[your-controller-here]/Edit/'+ escape(id) + '">Detay</a></td>');
var actions=$('');
…显然,无论您当前的控制器名称是什么,都会替换[此处的控制器]


(我假设您的“id”不一定是URL编码的,因此是“escape”。

如果您只是使用默认路由,那么就不用使用Razor@Html.ActionLink。使用显式标记:

var actions = $('<td><a href="/[your-controller-here]/Edit/'+ escape(id) + '">Detay</a></td>');
var actions=$('');
…显然,无论您当前的控制器名称是什么,都会替换[此处的控制器]


(我假设您的“id”不一定是URL编码的,因此是“escape”。

如果您只是使用默认路由,那么就不用使用Razor@Html.ActionLink。使用显式标记:

var actions = $('<td><a href="/[your-controller-here]/Edit/'+ escape(id) + '">Detay</a></td>');
var actions=$('');
…显然,无论您当前的控制器名称是什么,都会替换[此处的控制器]


(我假设您的“id”不一定是URL编码的,因此是“escape”。

如果您只是使用默认路由,那么就不用使用Razor@Html.ActionLink。使用显式标记:

var actions = $('<td><a href="/[your-controller-here]/Edit/'+ escape(id) + '">Detay</a></td>');
var actions=$('');
…显然,无论您当前的控制器名称是什么,都会替换[此处的控制器]


(我假设您的“id”不一定是URL编码的,因此是“escape”。

您在这里混合了服务器端和客户端。无法使用客户端变量创建@Html.ActioLink。ActionLink是在服务器上呈现的,它对客户端变量没有任何线索


如果您想使用客户端变量,如“id”,请呈现一个普通的html链接(a)标记。

您在这里混合了服务器端和客户端。无法使用客户端变量创建@Html.ActioLink。ActionLink是在服务器上呈现的,它对客户端变量没有任何线索


如果您想使用客户端变量,如“id”,请呈现一个普通的html链接(a)标记。

您在这里混合了服务器端和客户端。无法使用客户端变量创建@Html.ActioLink。ActionLink是在服务器上呈现的,它对客户端变量没有任何线索


如果您想使用客户端变量,如“id”,请呈现一个普通的html链接(a)标记。

您在这里混合了服务器端和客户端。无法使用客户端变量创建@Html.ActioLink。ActionLink是在服务器上呈现的,它对客户端变量没有任何线索


如果要使用客户端变量,如“id”,请呈现一个普通的html链接(a)标记。

不可能访问razor块中的javascript变量。

这是因为razor在服务器中执行,javascript在浏览器中执行

但是,通过查看您的代码,您似乎在使用javascript填充表,这很糟糕,有两种模式可以解决此问题,一种模式解决服务器中的所有问题,另一种模式解决浏览器中的所有问题

  • 解决服务器中的所有问题:
  • 如果您决定要解决服务器中的所有问题,javascript应该从服务器请求内容,并将其加载到占位符中,而不进行更改,例如:

    $("#myButton").click(function(){
        $("#myDinamicDiv").load("/Path/ToView");
    });  
    
    然后使用razor的foreach循环生成表的html:

    @foreach (var x in ViewBag.MyData)
    {
        <tr>
             <td>Generate contents here, including links </td>
        </tr>
    }
    
    @foreach(ViewBag.MyData中的变量x)
    {
    在此处生成内容,包括链接
    }
    
  • 解决客户机中的所有问题:

  • 正如在另一个答案中指出的,如果您使用默认路由,您可以在javascript代码中创建直接字符串并将其添加到您的页面,但是请记住,当使用此解决方案时,随着页面变得复杂,您的javascript将变得越来越不可维护,有一个对数据进行迭代的for循环是一个迹象,表明您可能会从javascript UI框架中受益,事实上,您所做的是Knockout.js教程(单页应用程序)第三课的核心内容。

    不可能在剃刀块中访问javascript变量。

    这是因为razor在服务器中执行,javascript在浏览器中执行

    但是,通过查看您的代码,您似乎在使用javascript填充表,这很糟糕,有两种模式可以解决此问题,一种模式解决服务器中的所有问题,另一种模式解决浏览器中的所有问题

  • 解决服务器中的所有问题:
  • 如果您决定要解决服务器中的所有问题,javascript应该从服务器请求内容,并将其加载到占位符中,而不进行更改,例如:

    $("#myButton").click(function(){
        $("#myDinamicDiv").load("/Path/ToView");
    });  
    
    然后使用razor的foreach循环生成表的html:

    @foreach (var x in ViewBag.MyData)
    {
        <tr>
             <td>Generate contents here, including links </td>
        </tr>
    }
    
    @foreach(ViewBag.MyData中的变量x)
    {
    在此处生成内容,包括链接
    }
    
  • 解决客户机中的所有问题:
  • 正如在另一个答案中指出的,如果您使用默认路由,您可以在javascript代码中创建直接字符串并将其添加到页面中,但是请记住,当使用此解决方案时,随着页面变得复杂,您的javascript将变得越来越少