7

我有一个 MVC 网站,后面有 C# 代码。我正在使用一个 ActionResult,它返回 Json。

我试图在 ViewBag 中放一些东西,但它似乎不起作用。

代码如下所示 -

    public ActionResult GetStuff(string id)
    {
        ViewBag.Id = id;

        stuff = new StuffFromDatabase(id);

        return this.Json(stuff , JsonRequestBehavior.AllowGet);
    }

“id”没有出现在 ViewBag.Id 中。

我可以这样把 id 放在 ViewBag 中吗?如果没有关于我应该如何做的任何建议?谢谢!

4

3 回答 3

4

另一种解决方案可以是:如果您想在返回 json 结果的发布操作后访问“id”属性,您可以返回一个包含所有所需数据的复杂对象:

public ActionResult GetStuff(string id)  
{  
    ViewBag.Id = id;  

    stuff = new StuffFromDatabase(id);  

    return this.Json(new { stuff = stuff, id = id } , JsonRequestBehavior.AllowGet);  
} 

之后,在 json 返回值中,您可以访问所有属性,如下例所示:

$.post(action, function(returnedJson) {
   var id = returnedJson.id;
   var stuff = returnedJson.stuff;
});
于 2012-09-28T14:53:38.770 回答
3

ViewBag 仅在服务器端可用。您正在将 json 字符串发送回浏览器,大概浏览器随后会对其进行处理。您必须在 json 响应中发送 id,如下所示:

return this.Json(new { Id = id, Data = stuff }, JsonRequestBehaviour.AllowGet);
于 2012-09-28T14:52:28.947 回答
1

你试图ViewBag.Id在 Json 结果中设置?ViewBag在视图中使用,而不是在Json.

添加

正如我从评论中看到的那样,然后您尝试在 javascript 中使用它,您可以做这样的事情。尝试这个:

return this.Json(new {stuff, id} , JsonRequestBehavior.AllowGet);

然后您可以在 javascript 中访问这些数据。

于 2012-09-28T14:51:17.447 回答