20

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

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

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

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

请帮忙。谢谢

4

1 回答 1

50

您误解了 ViewBag 的工作原理。

在 MVC 中工作时,当您打开一个网页时,(大致)会发生以下情况:

  1. 运行 FooController 的方法“索引”。最后,返回一个视图。
  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")
});

由于您的浏览器只看到最后一部分,所以它在 J​​avascript 中没有意义。在您的情况下,语法错误仅表示您的变量尚未初始化,并且您正在尝试访问null.

于 2012-08-14T09:00:07.840 回答