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

Why Viewbag not show in asp.net mvc view page?

我是 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

您 return 正在 JSON 而不是 ViewBag。您需要将 "razzaqi" 作为 JSON 对象的一部分发送到。设置 HTML 为

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

将您的控制器修改为 return 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');
    }
});

Viewbag 对象填充到视图中,服务器端在创建视图时。您的 ajax 调用联系服务器询问 Json 数据 在视图完成后

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


但是有一些workarounds/solutions解决这个问题:

  1. 让 Controller return 中的变量 Json 是 returning。
    • 获取所需数据的简单高效方式
    • Html 帮手等。但是不会工作,有时你只需要那个可怕的 viewbag...
  2. 执行 ajax 调用时重新加载局部视图。
    • 实施需要更多时间,您必须创建新的操作和局部视图。
    • 当您希望在通话中更改更多内容并希望使用 html 助手等时很好