ViewBag取不到值

yaotomo 2016-03-02 07:44:53
HomeController 下的Index Action,ViewBag.test="123"
然后在前台有个按钮,点击按钮发送Ajax请求到后台的GetData()方法
GetData()方法下 ViewBag.test = "456";
但是前台ajax的回调函数里取@ViewBag.test值还是"123"
如果在GetData()方法中设置ViewBag.test2 = "456"; 前台取@ViewBag.test2值为空。
请教这是怎么回事?对MVC还不是特别熟悉,请指点。
...全文
751 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
z389514870 2016-06-24
  • 打赏
  • 举报
回复
怎么解决的啊 我也遇到这个问题了 还是没弄懂
scboy2012 2016-03-02
  • 打赏
  • 举报
回复
你第二次是异步请求,并没有重载一次页面所以 viewbage的值不会变
qbilbo 2016-03-02
  • 打赏
  • 举报
回复
return Json(new { data1= "123", data2 = "456",.... }); ajax: success: function (data) { myValue1 = data.data1; myValue2 = data.data2; ..... }
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
引用 11 楼 qbilbo 的回复:
不知道你为什么一定要用viewbag,你都不返回页面,Viewbag还有什么用? 比如你的VIEW里有一个JS变量 var myValue = "@Viewbage.Value"; //123 用ajax提交: $.ajax({ ..... success: function (data) { myValue = data.data; //对应返回Json myValue = data; //对应直接返回字符串 }, ..... }); 这样不就好了?
有8个JSON对象要返回,怎么办? return JSON() 只能返回一个吧
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
JSON对象中每个属性设置为一个子JSON对象,这样就可以了吧
小鬼当家家 2016-03-02
  • 打赏
  • 举报
回复
既然都用ajax了,为何非要用ViewBag。直接返回json字符串不就行了
qbilbo 2016-03-02
  • 打赏
  • 举报
回复
不知道你为什么一定要用viewbag,你都不返回页面,Viewbag还有什么用? 比如你的VIEW里有一个JS变量 var myValue = "@Viewbage.Value"; //123 用ajax提交: $.ajax({ ..... success: function (data) { myValue = data.data; //对应返回Json myValue = data; //对应直接返回字符串 }, ..... }); 这样不就好了?
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
引用 9 楼 qbilbo 的回复:
viewbag是C向V传递数据用的,而你用ajax调用了方法,没更新页面,JS当然不会变。 一般你这种情况是返回一个Json对象,如: public ActionResult GetData(.....) { ...... return Json(new { success = true, data = "123" }); } 也可以更简单一点: public string GetData(.....) { ...... return "123"; }
页面刚打开的时候,给ViewBag赋过值,前台使用了。 再访问后台的时候,再给ViewBag赋值,已经传不到前台了,因为前台还是页面刚打开时的线程? 那是不是一个页面只能使用一次ViewBag,再次使用Ajax调用就无法和前台交互了? 如果不用Ajax,又想使用ViewBag给前台传值怎么办? 请指教,谢谢
qbilbo 2016-03-02
  • 打赏
  • 举报
回复
viewbag是C向V传递数据用的,而你用ajax调用了方法,没更新页面,JS当然不会变。 一般你这种情况是返回一个Json对象,如: public ActionResult GetData(.....) { ...... return Json(new { success = true, data = "123" }); } 也可以更简单一点: public string GetData(.....) { ...... return "123"; }
正怒月神 版主 2016-03-02
  • 打赏
  • 举报
回复
首先,你要明白什么是ajax。 你可以认为他是在后台开了个线程,然后这个线程去调用方法。所以这个线程已经和你的当前主线程没关系了。 最多你之后返回的数据,被ajax的回调方法获取到了。 因此,你应该把@ViewBag.test放入 action的返回值中,一起传递给ajax。 你用ajax访问的后台,已经不是当前线程的了。
正怒月神 版主 2016-03-02
  • 打赏
  • 举报
回复
@ViewBag.test 不能再js中赋值
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
引用 4 楼 qbilbo 的回复:
没看到代码,不知道怎么写的. 一般来说ajax是和controller交互的,获取到的是controller里return的东西,如果controller里return的不是一个view的话,那么你的viewbag是到不了浏览器的。
我return的是Content(影响行数) 因为要传给前台的东西有好多个,所以不适合return给前台,就用ViewBag了 代码后台调试ViewBag的值是已经变化了的,但是前台在JS里alert却没有改变 ViewBag在页面初始进入的时候已经赋值,比如ViewBag.test=‘a’,在这里又赋了一遍值,但是新赋的值没有更新到前台 如果设置新的ViewBag.tag ,前台alert @ViewBag.tag 为空,但是后台确实赋值了
qbilbo 2016-03-02
  • 打赏
  • 举报
回复
没看到代码,不知道怎么写的. 一般来说ajax是和controller交互的,获取到的是controller里return的东西,如果controller里return的不是一个view的话,那么你的viewbag是到不了浏览器的。
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
引用 3 楼 FoxDave 的回复:
你把ajax去掉再试试
不用ajax,我就没法再根据前台的条件去数据库查询东西了 但是在后台根据条件查出来后,前台显示的却还是没有条件过滤的内容 单步跟踪后台确实ViewBag的值已经变了,前台在JS里alert内容却没有变
Justin-Liu 2016-03-02
  • 打赏
  • 举报
回复
你把ajax去掉再试试
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
引用 1 楼 FoxDave 的回复:
提交到服务器后台就能取到了我觉得
不是要提交到后台,是后台取到数据传给前台。 点击按钮发送Ajax请求在后台给ViewBag设置了值,但是前台取到的还是以前(刚打开页面时)的值。
Justin-Liu 2016-03-02
  • 打赏
  • 举报
回复
提交到服务器后台就能取到了我觉得
yaotomo 2016-03-02
  • 打赏
  • 举报
回复
谢谢各位指点!问题解决了

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧