0

我有一个控制器,它有一个返回部分视图并生成 ViewData 的方法。然后,我有一些方法,每个方法都返回 Json 对象和 ViewData。但是, ViewData 没有得到刷新。如何刷新它?这可能吗?

public ActionResult FirstMethod() {
    ViewData["someList"] = ...;
    return PartialView(someOtherList);
}

public JsonResult SomeMethod()
{
    ViewData["someNewList"] = ...;
    return new JsonResult { ... };
}

但是,虽然 SomeMethod() 是在 FirstMethod() 之后调用的,但我在视图中使用的 ViewData 是 someList。

4

1 回答 1

2

这可能吗?

不,这是不可能的。ViewData 是一个弱类型字典,可以用来(虽然我不推荐使用它)在控制器和视图之间传递信息。它的生命周期与控制器动作执行管道的生命周期相关。所以一旦视图被渲染,它就结束了。不再存在控制器、视图、ViewData……。仅在客户端浏览器中呈现 HTML。

然后再次向服务器发送 AJAX 请求。这是一个全新的请求,与第一个请求(最初用于渲染视图)无关,因此使用自己的 ViewData 创建控制器的新实例。在返回 JSON 的控制器操作中设置 ViewData 是没有用的,因为由于此操作将使用 javascript 调用,因此您希望从控制器传递到 javascript 成功处理程序的所有信息都必须是您返回的 JSON 对象的一部分。

于 2012-05-29T06:45:26.923 回答