使用Jquery在ViewBag中设置值

我只想问一下,有没有办法使用jquery动态设置viewbag值? 我在我的脚本中尝试此代码,

$(".btn").on("click",function(){ @ViewBag.Id = $(this).attr("id") }); 

我不知道它是否正确,但当我尝试运行我的MVC 3项目时,这个错误出现在我的firebug中

 Syntax Error = $(this).attr("id") 

请帮忙。 谢谢

您误解了ViewBag的工作原理。

在MVC中工作,并打开一个网页,这是(大致)发生的事情:

  1. 运行FooController的方法’索引’。 最后,返回一个View。
  2. 然后,您的MVC应用程序将为您找到视图,并根据它在相关的.aspx文件中找到的HTML开始呈现它。 如果程序遇到诸如“@ ViewBag.Id”之类的项目,它将基本上用“.Id”值进行字符串替换。 (它有点复杂,但为了争论,它基本上是一个字符串替换)。
  3. 渲染后,HTML文档将发送到您的浏览器,然后浏览器显示它。

当您的浏览器获取页面时,您的ViewBag基本上已经“超出范围”。 这是因为您的ASP(MVC)应用程序使用ViewBag,但Javascript只在Web浏览器文档中有一个范围(这是在ViewBag超出范围 应用程序返回到浏览器的HTML代码。 Javascript不是MVC应用程序的一部分,只是生成的网页。

所以简短的回答是,不,你不能这样做。 尝试将其视为内联字符串替换。 您只能将ViewBag值放入HTML页面,而不是相反。

假设您的Id为5,aspx文件中的以下代码:

 $(".btn").on("click",function(){ @ViewBag.Id = $(this).attr("id") }); 

将被发送到浏览器

 $(".btn").on("click",function(){ 5 = $(this).attr("id") }); 

由于您的浏览器只能看到最后一部分,因此它在Javascript中没有意义。 在您的情况下,语法错误,它只是意味着您的变量尚未初始化,并且您尝试访问null