C# ViewBag到达时是空的

C# ViewBag到达时是空的,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个表单,其中聊天记录在数据库中,一切正常,问题是ViewBag,因为这会将消息传递到视图中的Javascript,以便进行验证。当用户注册时,应显示一条成功消息,但如果显示用户的数据,则ViewBag会在数据库中显示为错误消息,因此唯一的问题是ViewBag 另外,当我再次运行时,带有消息success的模式显示得很好 控制器 看法 为了回答您的问题,我首先要说,在您的案例中,为ViewBag设置null实际上是正确的,因为您使用了RedirectToAction,它将使所有ViewBag

我有一个表单,其中聊天记录在数据库中,一切正常,问题是ViewBag,因为这会将消息传递到视图中的Javascript,以便进行验证。当用户注册时,应显示一条成功消息,但如果显示用户的数据,则ViewBag会在数据库中显示为错误消息,因此唯一的问题是ViewBag

另外,当我再次运行时,带有消息success的模式显示得很好

控制器

看法


为了回答您的问题,我首先要说,在您的案例中,为ViewBag设置null实际上是正确的,因为您使用了RedirectToAction,它将使所有ViewBag数据都为null

ViewBag的寿命是当前请求,这意味着一旦您尝试离开当前请求,它将变为null。因此,您需要在自己的案例中使用TempData

TempData是一种仅以会话存储方式存储的数据。这是两个请求之间的最后一个生命周期。它有助于将数据从一个控制器传输到另一个控制器,或从一个动作传输到另一个动作。您使用TempData的方式与使用View data或ViewBag的方式稍有不同

所以我给你两个选择

首先

使用TempData和ViewBag

在Post action中,将finally行更改为

finally
{
    TempData["message"] = message;
}
然后在您重定向到的Get操作中,因为您使用了RedirectToAction,所以获取TempData并将其传递给view bag

var message = TempData ["message"];
If(message != null)
    ViewBag.message = message;
请注意,需要if语句来处理初始get请求,即在未设置TempData时不设置ViewBag的值

第二

仅使用临时数据

无论您决定使用哪个,访问方式都与您指定的方式相同

TempData["message"] //for TempData
ViewBag.message //for ViewBag

为了回答您的问题,我首先要说,在您的案例中,为ViewBag设置null实际上是正确的,因为您使用了RedirectToAction,它将使所有ViewBag数据都为null

ViewBag的寿命是当前请求,这意味着一旦您尝试离开当前请求,它将变为null。因此,您需要在自己的案例中使用TempData

TempData是一种仅以会话存储方式存储的数据。这是两个请求之间的最后一个生命周期。它有助于将数据从一个控制器传输到另一个控制器,或从一个动作传输到另一个动作。您使用TempData的方式与使用View data或ViewBag的方式稍有不同

所以我给你两个选择

首先

使用TempData和ViewBag

在Post action中,将finally行更改为

finally
{
    TempData["message"] = message;
}
然后在您重定向到的Get操作中,因为您使用了RedirectToAction,所以获取TempData并将其传递给view bag

var message = TempData ["message"];
If(message != null)
    ViewBag.message = message;
请注意,需要if语句来处理初始get请求,即在未设置TempData时不设置ViewBag的值

第二

仅使用临时数据

无论您决定使用哪个,访问方式都与您指定的方式相同

TempData["message"] //for TempData
ViewBag.message //for ViewBag