2013-02-28 127 views
1

我需要使用@(ViewData["value"]);document.ready。但是,当我使用 @(ViewData["value"])所有jQuery不起作用。我的示例如下:jquery不能在cshtml页面工作

$(document).ready(function() { 
    var test = @(ViewData["value"]); // remove this line query has been working 
    if (test != null){ 
     //my code 
    } 
}); 
+0

也许这一个帮助你VAR测试= @(serializer.Serialize(计算机[ “值”)); – snowp 2013-02-28 04:48:54

回答

2

如果使用C#内部脚本标记,则需要将C#变量括在引号中。尝试

$(document).ready(function() { 
     var test = '@(ViewData["value"])'; 
      if (test != null){ 
    } 
    }); 

如果你的ViewData的值“值”]是它的好,如果你不放在引号数字,但如果是字符串,例如空格计算机[“价值”] =“你好世界“您的浏览器会收到一个错误,说”SyntaxError:失踪;之前的声明“,这就是为什么你的脚本或jQuery将不再工作。

1

ViewData在客户端无法访问,因为它只存在于视图呈现中。 可能的选择

  1. 序列化在服务器端视图数据JSON
  2. 其写入隐藏字段,并分析其对客户端的JavaScript对象。
+0

恕我直言,OP试图做什么也是一种可能的选择:在呈现脚本时访问'ViewData' – andri 2013-02-28 05:06:53

3

而不是访问@(ViewData["value"]);里面的javascript,最好把它放在隐藏字段或其他元素中。看代码如下:

<input id="some-id" type="hidden" value="@(ViewData["value"]);" /> 

... 
... 
... 
$(document).ready(function() { 
    var test = $("#some-id"); 
    if (test != null){ 
     //my code 
    } 
}); 
+0

这个答案很好,但在高度优化的Web应用程序中是不可接受的。想象一下,调用ViewData [“value”]的Web应用程序返回20kb大小的数据,然后将20kb大小存储到隐藏字段,然后将20kb的大小存储到您的页面大小中,因此总计40kb将被添加到整个Web进程 – 2013-03-01 04:15:38

0

如果您ViewData["value"]string,你可以试试这个:

var test = '@ViewData["value"]'; 
相关问题