为什么Viewbag没有在asp.net mvc视图页面中显示?

时间:2016-06-23 12:24:03

标签: javascript c# asp.net-mvc viewbag

我是asp.net mvc的初学者,编写这个java脚本代码,用于从控制器获取任何数据:

 $.ajax({
    url: '@Url.Action("CallService", "MyScore")',
    type: 'GET',
    dataType: 'json',
    cache: false,
    data: {
        'id': 29
    },
    success: function(color) {
        //alert(color);
    },
    error: function() {
        alert('Error occured');
    }
}); 

并在控制器中写下此操作:

[HttpGet]
        public ActionResult CallService(string id)
        {

            var idNum = Convert.ToInt32(id);

            string color = idNum.ToString();
            ViewBag.Myfamily = "razzaqi";

            return Json(color, JsonRequestBehavior.AllowGet);
        }


在视图页面中写下此代码:

<h1> Hello Dear @ViewBag.Myfamily</h1>


当我运行项目<h1> Hello Dear @ViewBag.Myfamily</h1>没有告诉我,但我认为这给我看这个输出:

Hello Dear razzaqi

2 个答案:

答案 0 :(得分:1)

您返回的JSON不是ViewBag。您需要将"razzaqi"作为JSON对象的一部分发送。将HTML设置为

<h1> Hello Dear <span id='familyname'></span></h1>

修改您的控制器以返回myfamily作为JSON对象的一部分。

[HttpGet]
public ActionResult CallService(int id)
{
    string color = id.ToString();

    return Json(new {
        color = color
        myfamily = "razzaqi"
    }, JsonRequestBehavior.AllowGet);
}

使用像

这样的结果
$.ajax({
    url: '@Url.Action("CallService", "MyScore")',
    type: 'GET',
    dataType: 'json',
    cache: false,
    data: { 'id': 29 },
    success: function (data) {
        $('#familyname').text(data.myfamily)
    },
    error: function () {
        alert('Error occured');
    }
});

答案 1 :(得分:0)

Viewbag对象在进行视图时填充到视图,服务器端。您的ajax调用与服务器联系,在查看完成后询问Json数据

所以,如果你这样做,你就太迟了将对象传递给你的viewbag ......

但是有一些解决此问题的解决方法/解决方案:

  1. 让Controller返回它返回的Json中的变量。
    • 获取所需数据的简单有效方法
    • Html助手等不会工作,有时候你只需要那个可怕的视图......
  2. 执行ajax调用时重新加载partialview。
    • 需要更多时间来实施,您必须创建一个新动作和部分视图。
    • 如果您希望更多内容在通话中更改并希望使用html帮助程序等,那就很好。