繁体   English   中英

为什么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

您返回的是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');
    }
});

制作视图时,将Viewbag对象填充到视图(服务器端)中。 在完成视图之后,您的ajax调用会与服务器联系,询问有关Json数据的信息

因此,如果您这样做的话,将对象传递到视图包中为时已晚。


但是,对于此问题,有一些解决方法/解决方案:

  1. 让Controller在要返回的Json中返回变量。
    • 简单高效的获取所需数据的方法
    • HTML助手等。但是有时无法使用,有时您只需要那个可怕的提包...
  2. 进行ajax调用时,重新加载partialview。
    • 需要花费更多的时间来实现,您将不得不创建一个新的动作和局部视图。
    • 当您希望在通话中更改更多内容并希望使用html helper等时,此功能很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM