Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在返回Json的方法中刷新ViewData_Asp.net Mvc_Partial Views_Viewdata - Fatal编程技术网

Asp.net mvc 在返回Json的方法中刷新ViewData

Asp.net mvc 在返回Json的方法中刷新ViewData,asp.net-mvc,partial-views,viewdata,Asp.net Mvc,Partial Views,Viewdata,我有一个控制器,它有一个返回部分视图并生成ViewData的方法。然后,我有一些方法,每个方法都返回Json对象和ViewData。但是,ViewData没有得到刷新。如何刷新它?这可能吗 public ActionResult FirstMethod() { ViewData["someList"] = ...; return PartialView(someOtherList); } public JsonResult SomeMethod() { ViewData

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

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

public JsonResult SomeMethod()
{
    ViewData["someNewList"] = ...;
    return new JsonResult { ... };
}
但是,尽管在FirstMethod()之后调用了SomeMethod(),但我在视图中使用的ViewData是someList

这可能吗

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

public JsonResult SomeMethod()
{
    ViewData["someNewList"] = ...;
    return new JsonResult { ... };
}
不,不可能。ViewData是一个弱类型字典,可用于(尽管我不建议使用它)在控制器和视图之间传递信息。它的生命周期与控制器操作执行管道的生命周期相关联。因此,一旦渲染视图,就结束了。无控制器、视图、视图数据。。。不再存在了。仅在客户端浏览器中呈现HTML


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

为什么不建议使用ViewData?因为它的类型很弱。我建议使用视图模型。@标记“是”。我编辑了问题。ViewData将在每个请求中清除,如@Darin所述,您无需手动执行此操作。通常,每个操作(除非是子操作)都对应于浏览器请求。因此,如果您在一个操作中为ViewData设置了一些值,那么在另一个操作中它将不可用。