使用Jquery在ViewBag中设置值

使用Jquery在ViewBag中设置值,jquery,asp.net-mvc,viewbag,Jquery,Asp.net Mvc,Viewbag,我只是想问,有没有一种方法可以使用jquery动态设置viewbag值? 我在脚本中尝试了这段代码 $(".btn").on("click",function(){ @ViewBag.Id = $(this).attr("id") }); 我不知道它是否正确,但当我尝试运行我的MVC3项目时,这个错误出现在我的firebug中 Syntax Error = $(this).attr("id") 请帮忙。谢谢您误解了ViewBag的工作原理 在MVC中工作时,您打开一个网页,这是(大致

我只是想问,有没有一种方法可以使用jquery动态设置viewbag值? 我在脚本中尝试了这段代码

$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});
我不知道它是否正确,但当我尝试运行我的MVC3项目时,这个错误出现在我的firebug中

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

请帮忙。谢谢

您误解了ViewBag的工作原理

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

  • FooController的方法“Index”已运行。最后,返回一个视图
  • 然后,MVC应用程序将为您找到视图,并根据它在相关的.aspx文件中找到的HTML开始呈现视图。如果程序遇到诸如“@ViewBag.Id”之类的项,它基本上会用“.Id”值替换字符串。(比这复杂一点,但为了论证,它基本上是用字符串替换的)
  • 呈现后,HTML文档将发送到浏览器,然后由浏览器显示
  • 当你的浏览器获取页面时,你的ViewBag基本上已经“超出范围”。这是因为您的ASP(MVC)应用程序使用ViewBag,但Javascript在web浏览器文档中只有一个作用域(这是应用程序在查看包超出范围后返回到浏览器的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

    ,很抱歉,我注意到我忘记键入错误,可能
    @ViewBag.Id
    没有在某个地方定义,因此我无法输入任何内容s输出(而不是错误),因此赋值的左侧是空的。请检查您的代码以查看
    @ViewBag.Id
    在何处声明。谢谢您。现在我真的理解了您的观点。我只能显示ViewBag的值,但使用jquery在其上添加值是不可能的。非常感谢。这些解决方案还有其他选择吗。@anvesh.veerelli:如果你想让服务器知道网页中发生的变化,你的网页需要连接回服务器。这可以通过很多很多不同的方式来实现,从表单帖子、ajax调用到更复杂的解决方案,比如信号器。你的问题很广泛。@Flater Hi!那么我如何获得下拉列表的值呢(值存储在ViewBag中)内联jqyery中。在jquery内联中获取该值的替代方法是什么?我需要在内联jquery中使用Viewbag的值。@Nabid您似乎没有抓住答案的要点。从Viewbag中获取值到页面上很容易。您可以像OP尝试的那样来做。它是从加载的pa中获取值转到更难的视图包。